カスタムDjangoモデルフィールドを開発するために、私はドキュメントを読んでいます。Djangoの "deconstruct"モデルフィールド関数の目的は何ですか?
私はすでに(例とほぼ同等で、HandField
:Pythonクラス上にマッピングされたフィールド...私はmodels.CharField
なくmodels.Field
から継承唯一の違いで)私のカスタムフィールドを開発しました。
from external_library import ExternalClass
class ExternalClassField(models.CharField):
description = "An ExternalClass field"
def __init__(self, *args, **kwargs):
kwargs['max_length'] = 14
super(ExternalClassField, self).__init__(*args, **kwargs)
def from_db_value(self, value, expression, connection, context):
if value is None:
return value
return ExternalClass(value)
def to_python(self, value):
if isinstance(value, ExternalClass):
return value
if value is None:
return value
return ExternalClass(value)
def get_prep_value(self, value):
if value is None:
return value
if isinstance(value, ExternalClass):
return value.to_string()
return value
フィールドは期待どおりに動作します。しかし、私はドキュメントのこの部分に固執しています:deconstruct()機能。特に
、私は理解していないことはこれです:
- 正確に解体機能の目的は何ですか?
- 私のフィールドは、たとえそれがなくても完璧にうまくいくのです(そして、
init
引数を変更しても)? - Djangoはどのようにdeconstruct関数を呼び出していますか?
私はわからないコードを盲目的にコピーして貼り付けたいとは思わないが、ドキュメントは明確ではない。
フィールドをシリアル化するために移行で使用されます。 – knbk