django - How to deal with "SubfieldBase has been deprecated. Use Field.from_db_value instead." -


on upgrade django 1.9, warning

removedindjango110warning: subfieldbase has been deprecated. use field.from_db_value instead. 

i see problem arises. have custom field definitions, , in them have __metaclass__ = models.subfieldbase. example,

class durationfield(models.floatfield):      __metaclass__ = models.subfieldbase      def __init__(self, *args, **kwargs):      ... 

if __metaclass__ statement deprecated, supposed replace exactly?

do take out , add from_db_value method in example here: https://docs.djangoproject.com/en/1.9/howto/custom-model-fields/#converting-values-to-python-objects ?

and how from_db_value , to_python different? both seem convert database data python objects?

yes, should remove __metaclass__ line , add 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):         ... 

as described here: https://docs.djangoproject.com/en/1.9/ref/models/fields/#field-api-reference, to_python(value) converts value (can none, string or object) correct python object.

from_db_value(value, expression, connection, context) converts value returned database python object.

so, both methods return python objects, used django in different situations. to_python() called deserialization , during clean() method used forms. from_db_value() called when data loaded database


Comments

Popular posts from this blog

Delphi XE2 Indy10 udp client-server interchange using SendBuffer-ReceiveBuffer -

Qt ActiveX WMI QAxBase::dynamicCallHelper: ItemIndex(int): No such property in -

Enable autocomplete or intellisense in Atom editor for PHP -