gpt4 book ai didi

python - Django 中自定义字段的自定义排序

转载 作者:行者123 更新时间:2023-11-28 18:52:39 24 4
gpt4 key购买 nike

在我的应用程序中,我使用 quantities 定义了一个自定义字段来表示物理量包裹。

class AmountField(models.CharField):
def __init__(self, *args, **kwargs):
...

def to_python(self, value):
create_quantities_value(value)

本质上,它的工作方式是扩展 CharField 以将值作为字符串存储在数据库中

"12 min"

并在模型中使用字段时将其表示为数量对象

array(12) * min

然后在模型中这样使用:

class MyModel(models.Model):
group = models.CharField()
amount = AmountField()

class Meta:
ordering = ['group', 'amount']

我的问题是这些字段似乎不是按数量排序,而是按字符串排序。

所以如果我有一些对象包含类似

  • {"group":"A", "amount":"12 分钟"}
  • {"group":"A", "amount":"20 分钟"}
  • {"group":"A", "amount":"2 min"}
  • {"group":"B", "amount":"20 分钟"}
  • {"group":"B", "amount":"1 hr"}

他们最终排序如下:

>>> MyModel.objects.all()
[{A, 12 min}, {A, 2 min}, {A, 20 min}, {B, 1 hr}, {B, 20 min}]

基本上按字母顺序排列。

我能否为我的自定义 AmountField 提供一个比较函数,以便它根据 Python 值而不是 DB 值进行比较?

最佳答案

我认为没有办法将其排序为数字。我的意思是没有有效的方法,因为我相信 Django 允许以某种方式按计算字段排序,但你必须计算所有键才能做到这一点。因此,尝试找到一种将数字存储为数据库中的数字的方法。也许将数量存储为整数并添加方法或属性以将其转换为数量对象?像这样:

class MyModel(models.Model):
group = models.CharField()
amount = models.IntegerField() # or PositiveIntegerField

class Meta:
ordering = ['group', 'amount']

def amountAsQuantityObject(self):
return create_quantities_value(self.amount)

# or as a property
quantity_object = property(amountAsQuantityObject)

关于python - Django 中自定义字段的自定义排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9912261/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com