On aggiornamento a Django 1.9, io ora ottenere l'avvertimentoCome gestire "SubfieldBase è stato dichiarato obsoleto. Utilizza invece Field.from_db_value."
RemovedInDjango110Warning: SubfieldBase has been deprecated. Use Field.from_db_value instead.
vedo dove si pone il problema. Ho alcune definizioni di campo personalizzate e in esse ho __metaclass__ = models.SubfieldBase
. Ad esempio,
class DurationField(models.FloatField):
__metaclass__ = models.SubfieldBase
def __init__(self, *args, **kwargs):
...
Se l'istruzione __metaclass__
è deprecato, cosa dovrei sostituirlo con esattamente?
Devo solo estrarlo e aggiungere un metodo from_db_value
come nell'esempio qui: https://docs.djangoproject.com/en/1.9/howto/custom-model-fields/#converting-values-to-python-objects ?
E come sono diversi from_db_value
e to_python
? Entrambi sembrano convertire i dati del database in oggetti Python?
questa è una risposta molto buona e completa. @mjandrews: perché non l'hai contrassegnato come una risposta finale? – pt12lol
Ho scoperto che senza metaclasse, 'to_python' non è sempre chiamato lo stesso. Ad esempio, se crei una nuova istanza di un oggetto e poi provi a leggere il campo personalizzato, non chiamerà i metodi con cui il metaclass ha chiamato il metodo. –