Изменить свойства свойств класса (verbose_name exmpl.) из базовой модели Django
У меня есть абстрактный класс с полем name и slug. Когда я наследую от другого класса, я хочу изменить параметр verbose_name в соответствии с этим классом. Как я могу установить это свойство? Я хочу установить параметр verbose_name поля name в значение "foo". но я хочу использовать разные данные параметров для двух разных классов.
Пример:
Для поля имени ProductModel verbose_name="Foo"
Для поля CategoryModel name verbose_name="Poo"
class BaseProductModel(models.Model):
name = models.CharField(max_length=200)
slug = AutoSlugField(populate_from="name",unique=True,verbose_name="Slug")
class Meta:
abstract=True
class ProductModel(BaseProductModel):
# I want to set the verbose_Name parameter of the name field to "foo".
#The two fields (name and slug) come from the inherited (BaseProductModel) class.
description = models.TextField(max_length=500,verbose_name="Detay")
class CategoryModel(BaseProductModel):
# The two fields (name and slug) come from the inherited (BaseProductModel) class.
# I want to set the verbose_Name parameter of the name field to "Poo".
def __str__(self):
return self.name
Вы можете сделать это двумя способами
Во-первых, работает только для абстрактных классов, иначе изменит verbose_name родительского класса тоже:
class ProductModel(BaseProductModel):
# I want to set the verbose_Name parameter of the name field to "foo".
#The two fields (name and slug) come from the inherited (BaseProductModel) class.
description = models.TextField(max_length=500,verbose_name="Detay")
ProductModel.get_field('name').verbose_name = 'Foo'
Во-вторых, сделайте это в методе __init__:
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
field = self._meta.get_field('name')
field.verbose_name = 'Foo'