Изменить свойства свойств класса (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'
Вернуться на верх