Как редактировать help_text дочернего класса в родительском классе

Я сделал mixin (такой же, как родительский класс) для моей модели brand, и я хочу получить имя класса дочерних классов и заменить его на help_text в классе parent. Есть ли какое-нибудь решение?

class TitleSlugMixin(models.Model):
    title = models.CharField(
        _('title'),
        max_length=255,
        help_text=_(f'{self.__class__.__name__} title.')
    )

class Brand(TitleSlugMixin):
    ...

Много vars() позже, возможно:

Примечание: Я тестировал это на аналогичной установке наследования, но мое поле было machine (без подчеркивания) поэтому вам, возможно, придется добавить это подчеркивание (См. отладочную __init__ & Моя закомментированная строка)

).

Models.py

class TitleSlugMixin(models.Model):
    title = models.CharField(
        _('title'),
        max_length=255,
    )

    def __init__(self, *args, **kwargs):
        super().__init__()
        # Dynamically Change Help Text
        self.__class__.title.field.help_text = '{0} title'.format(self.__class__.__name__)

Отладка __init__

def __init__(self, *args, **kwargs):
    super().__init__()

    print('name', self.__class__.__name__)

    # This is where you could see all the available fields
    # Note: You'll have to clean this data up to view it reasonably 
    print('class', vars(self.__class__))

    print('help text, before', self.__class__.title.field.help_text)

    self.__class__.title.field.help_text = '{0} title'.format(self.__class__.__name__)

    print('help after, after', self.__class__.title.field.help_text)

    # # Other:
    # print('title', vars(self.__class__.title))
    # print('field', vars(self.__class__.title.field))
  • Шаги:
    1. Обратите внимание на Одиночный Пк для объекта Brand (помогает уменьшить текстовый дамп, для шага #4)
    2. Замените __init__ на код ниже
    3. python manage.py shell
    4. Импортная модель бренда
    5. o = Brand.objects.get(pk=pk_from_step_1) => vars() Output
    6. Очистка, необязательная:
      • Копировать словарь и вставить в текстовый редактор
      • Заменить все , новыми строками (\n или \r в зависимости от этого)
Вернуться на верх