Ответ 1
Да, вы должны просто удалить строку __metaclass__
и добавить from_db_value()
и to_python()
:
class DurationField(models.FloatField):
def __init__(self, *args, **kwargs):
...
def from_db_value(self, value, expression, connection, context):
...
def to_python(self, value):
...
Как описано здесь: https://docs.djangoproject.com/en/1.9/ref/models/fields/#field-api-reference, to_python(value)
преобразует значение (может быть None, string или object) в правильный объект Python.
from_db_value(value, expression, connection, context)
преобразует значение, возвращаемое базой данных, в объект Python.
Итак, оба метода возвращают объекты Python, но они используются Django в разных ситуациях. to_python()
вызывается десериализацией и методом clean()
, используемым из форм. from_db_value()
вызывается, когда данные загружаются из базы данных