在我的應用程序中,我定義了一個自定義字段來表示使用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