Какова цель удаления 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 удаляется, если он необходим для инстанцирования поля?

Вернуться на верх