在升級到1.9 Django的,我現在得到警告如何處理「SubfieldBase已被棄用,請改用Field.from_db_value」。
RemovedInDjango110Warning: SubfieldBase has been deprecated. Use Field.from_db_value instead.
我看到那裏的問題出現了。我有一些自定義字段定義,並且在其中我有__metaclass__ = models.SubfieldBase
。例如,
class DurationField(models.FloatField):
__metaclass__ = models.SubfieldBase
def __init__(self, *args, **kwargs):
...
如果__metaclass__
說法已經過時,那我應該用準確來更換呢?
我只是把它拿出來,並添加一個from_db_value
方法就像這裏的例子:https://docs.djangoproject.com/en/1.9/howto/custom-model-fields/#converting-values-to-python-objects ?
from_db_value
和to_python
如何不同?兩者似乎都將數據庫數據轉換爲Python對象?
這是非常好的和全面的答案。 @mjandrews:你爲什麼不把它標記爲最終答案? – pt12lol
我發現沒有元類,'to_python'並不總是被調用。例如,如果您創建一個對象的新實例,然後嘗試讀取自定義字段,它將不會調用其調用該方法的元類的方法。 –