在我的应用程序中,我定义了一个自定义字段来表示使用quantities包的物理量。自定义排序在Django的自定义字段中
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']
我的问题是这些字段似乎不是按数量排序,而是按字符串排序。
所以,如果我有包含类似
- 一些对象{ “基团”: “A”, “量”: “12分钟”}
- { “基团”: “A”, “数量”:“20分钟”}
- {“group”:“A”,“amount”:“2min”}
- {“group”:“B”,“amount”:“20min” }
- {“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值进行比较吗?
这不是一个真正的选择。首先,我使用[quantity](http://packages.python.org/quantities/user/tutorial.html)对象的字符串表示形式,并且不必编辑该代码。即使我做了,也会有未知数量的前导零。我用它来存储不只是时间,而是任何东西。例如,可能是10000磅。 – RotaJota 2012-03-28 17:04:55