Как редактировать 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))
- Шаги:
- Обратите внимание на Одиночный Пк для объекта Brand (помогает уменьшить текстовый дамп, для шага #4)
- Замените
__init__
на код ниже python manage.py shell
- Импортная модель бренда
o = Brand.objects.get(pk=pk_from_step_1)
=> vars() Output- Очистка, необязательная:
- Копировать словарь и вставить в текстовый редактор
- Заменить все
,
новыми строками (\n
или\r
в зависимости от этого)