В моем приложении я определил настраиваемое поле для представления физической величины с использованием пакета Количества .
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']
Моя проблема в том, что эти поля сортируются не по количеству, а по строке.
Так что, если у меня есть объекты, которые содержат что-то вроде
- {"группа": "А", "сумма": "12 мин"}
- {"группа": "А", "сумма": "20 мин"}
- {"группа": "А", "сумма": "2 мин"}
- {"группа": "B", "сумма": "20 минут"}
- {"группа": "B", "количество": "1 час"}
в итоге они сортируются примерно так:
>>> MyModel.objects.all()
[{A, 12 min}, {A, 2 min}, {A, 20 min}, {B, 1 hr}, {B, 20 min}]
по существу в алфавитном порядке.
Могу ли я дать своему пользовательскому AmountField функцию сравнения, чтобы он сравнивался по значению python вместо значения DB?