Ammy Pawar
Ammy Pawar

Reputation: 11

RemovedInDjango110Warning: SubfieldBase has been deprecated

On making changes in fields.py file, I am not receiving any warning but the application does not work.

dir:/home/ammy/aamp/lib/python2.7/site-packages/geoposition/fields.py

Code Snippet :

from __future__ import unicode_literals

from django.db import models
from django.utils.six import with_metaclass
from django.utils.translation import ugettext_lazy as _
from django.utils.encoding import smart_text

from . import Geoposition
from .forms import GeopositionField as GeopositionFormField


class GeopositionField(with_metaclass(models.SubfieldBase, models.Field)):
    description = _("A geoposition (latitude and longitude)")

    def __init__(self, *args, **kwargs):
        kwargs['max_length'] = 42
        super(GeopositionField, self).__init__(*args, **kwargs)

    def get_internal_type(self):
        return 'CharField'

    def to_python(self, value):
        if not value or value == 'None':
            return None
        if isinstance(value, Geoposition):
            return value
        if isinstance(value, list):
            return Geoposition(value[0], value[1])

        # default case is string
        value_parts = value.rsplit(',')
        try:
            latitude = value_parts[0]
        except IndexError:
            latitude = '0.0'
        try:
            longitude = value_parts[1]
        except IndexError:
            longitude = '0.0'

        return Geoposition(latitude, longitude)

    def get_prep_value(self, value):
        return str(value)

    def value_to_string(self, obj):
        value = self._get_val_from_obj(obj)
        return smart_text(value)

    def formfield(self, **kwargs):
        defaults = {
            'form_class': GeopositionFormField
        }
        defaults.update(kwargs)
        return super(GeopositionField, self).formfield(**defaults)

Error :

RemovedInDjango110Warning: SubfieldBase has been deprecated. Use Field.from_db_value instead. return meta(name, bases, d)

Upvotes: 1

Views: 1329

Answers (1)

ozren1983
ozren1983

Reputation: 1951

The problem is in this line:

class GeopositionField(with_metaclass(models.SubfieldBase, models.Field)):

Change it to:

class GeopositionField(models.Field):

You'll also have to implement from_db_value() as described here: https://docs.djangoproject.com/en/1.9/howto/custom-model-fields/#converting-values-to-python-objects

Upvotes: 2

Related Questions