How to deal with “SubfieldBase has been deprecated. Use Field.from_db_value instead.”

By: Varghese Chacko 1 year, 4 months ago

How to deal with "SubfieldBase has been deprecated. Use Field.from_db_value instead." On upgrade to Django 1.9, we may now get the warning

RemovedInDjango110Warning: SubfieldBase has been deprecated. Use Field.from_db_value instead.

To fix this,  you should just remove __metaclass__ line and add from_db_value() and 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 the value (can be None, string or object) into the correct Python object.

from_db_value(value, expression, connection, context) converts a value as returned by the database to a Python object.

So, both methods return Python objects, but they are used by Django in different situations. to_python() is called by deserialization and during the clean() method used from forms. from_db_value() is called when the data is loaded from the database

Wish to hire us?

We take the vision which comes from dreams and apply the magic of science and mathematics, adding the heritage of our profession and our knowledge to create a design.