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), то вам нужно будет дополнить передаваемые значения.