Какова цель удаления kwargs в методе deconstruct поля?
В документации, подробно описывающей, как написать пользовательское поле модели: Writing custom model fields, я не могу понять реализацию Field Deconstruction и deconstruct()
.
В приведенном ими примере:
Например, в нашем классе HandField мы всегда принудительно устанавливаем max_length в init(). Метод deconstruct() базового класса Field увидит это и попытается вернуть это значение в аргументах ключевых слов; таким образом, мы можем убрать его из аргументов ключевых слов для удобочитаемости:
from django.db import models
class HandField(models.Field):
def __init__(self, *args, **kwargs):
kwargs['max_length'] = 104
super().__init__(*args, **kwargs)
def deconstruct(self):
name, path, args, kwargs = super().deconstruct()
del kwargs["max_length"]
return name, path, args, kwargs
Далее в документации говорится следующее:
для любой конфигурации вашего экземпляра Field, deconstruct() должна возвращать аргументы, которые вы можете передать в init для восстановления этого состояния.
Почему аргумент ключевого слова max_length
удаляется, если он необходим для инстанцирования поля?