В моем приложении я определил настраиваемое поле для представления физической величины с использованием пакета 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']
Моя проблема заключается в том, что эти поля, похоже, не сортируются по количеству, а вместо этого по строке.
Так что, если у меня есть некоторые объекты, которые содержат что-то вроде
- { "группа": "А", "количество": "12 минут"}
- { "группа": "А", «сумма»: «20 мин»}
- {"group": "A", "amount": "2 min"}
- {"group": "B", "amount": "20 min" }
- {"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