W celu opracowania niestandardowych pól modelu Django, czytam dokumentację.Jaki jest cel funkcji "dekonstrukcji" modelu Django?
już opracowany moje pole niestandardowe (co jest prawie równa, na przykład: HandField
polu odwzorowanym na klasę Pythona ... Z tą tylko różnicą, że dziedziczą z models.CharField
i nie 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
Pole zachowuje się zgodnie z oczekiwaniami. Jednak utknąłem w tej części dokumentacji: funkcja deconstruct().
W szczególności, co nie rozumiem to:
- Czym dokładnie jest cel funkcji dekonstrukcji?
- Dlaczego moje pole działa doskonale nawet bez niego (i nawet jeśli zmienię argumenty
init
)? - Jak i kiedy Django wywołuje funkcję dekonstrukcji?
Nie chcę ślepo kopiować i wklejać kodu, którego nie rozumiem, ale dokumentacja nie jest jasna.
Jest używany w migracji do serializacji pola. – knbk