Na uaktualnieniu do Django 1.9, teraz dostać ostrzeżenieJak radzić sobie z "SubfieldBase został wycofany. Zamiast tego użyj Field.from_db_value."
RemovedInDjango110Warning: SubfieldBase has been deprecated. Use Field.from_db_value instead.
widzę gdzie pojawia się problem. Mam pewne niestandardowe definicje pól, aw nich mam __metaclass__ = models.SubfieldBase
. Na przykład,
class DurationField(models.FloatField):
__metaclass__ = models.SubfieldBase
def __init__(self, *args, **kwargs):
...
Jeśli instrukcja __metaclass__
jest przestarzała, co mam go zastąpić dokładnie?
Czy po prostu wyjmę i dodaję metodę from_db_value
, jak w tym przykładzie: https://docs.djangoproject.com/en/1.9/howto/custom-model-fields/#converting-values-to-python-objects ?
Czym różnią się from_db_value
i to_python
? Obie wydają się konwertować dane bazy danych do obiektów Python?
to jest bardzo dobra i wyczerpująca odpowiedź. @mjandrews: dlaczego nie oznaczyłeś go jako ostateczną odpowiedź? – pt12lol
Znalazłem, że bez metaclass 'to_python' nie zawsze nazywa się tym samym. Na przykład, jeśli utworzysz nową instancję obiektu, a następnie spróbujesz odczytać pole niestandardowe, nie wywoła ona metod, w których metaclass wywołał metodę. –