Verbose name on class field в django

Мне нужна помощь, чтобы добавить многословное имя

class Address(models.Model) :
    
    class Zip(models.Field):
       def db_type(self, connection):
           return 'char(8)'

    zip            = Zip()
    address        = models.CharField(max_length=200, verbose_name="Rua")

        .....

Необходимо поместить вебозное имя ZIP в CEP

Django models.Field.__init__() принимает verbose_name в качестве параметра, вы можете задать имя там

class Address(models.Model):

    class Zip(models.Field):

        def __init__(self, max_length=8, *args, **kwargs):
            kwargs['verbose_name'] = "Zip code"
            self.max_length = max_length
            super().__init__(*args, **kwargs)

        def deconstruct(self):
            name, path, args, kwargs = super().deconstruct()
            del kwargs["verbose_name"]
            if kwargs.get("max_length"):
               del kwargs["max_length"]
            return name, path, args, kwargs

        def db_type(self, connection):
            return 'char(%s)' % self.max_length

    zip = Zip()
    address = models.CharField(max_length=200, verbose_name="Rua")

От Django-doc

Противовесом написанию метода init() является написание метода deconstruct(). Он используется во время миграции модели, чтобы сказать Django как взять экземпляр вашего нового поля и уменьшить его до сериализованную форму - в частности, какие аргументы передать в init() для его повторного создания.

Если вы не добавили никаких дополнительных опций поверх поля, которое вы унаследовали от него, то нет необходимости писать новый метод deconstruct() метод. Однако если вы изменяете аргументы, переданные в методе init() (как мы делаем в HandField), то вам нужно будет дополнить передаваемые значения.

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