Django - Добавить текст справки в поле, унаследованное от абстрактного базового класса
Я только что обнаружил атрибут "help_text" у полей модели Django, который автоматически добавляет справочные тексты к полям, например, в панели администратора. Опять же, какая хорошая функция Django!
Теперь у меня проблема: я хочу добавить help_text в поле, которое наследуется от родительского абстрактного базового класса... как я могу этого добиться?
class AbstractBioSequence(models.Model):
"""
General sequence (DNA or AA)
"""
name_id = models.CharField(max_length=100, null=True)
description = models.CharField(max_length=1000, null=True, blank=True)
sequence = models.TextField()
class Meta:
abstract = True
class DnaSequence(AbstractBioSequence):
some_dna_field = models.TextField()
# -------- I want to add a DnaSequence specific helper text to the "sequence" field here
Существует множество способов сделать это.
Путь к документации Django:
class DnaSequence(AbstractBioSequence):
some_dna_field = models.TextField()
description = models.CharField(max_length=1000, null=True, blank=True, help_text=_("DnaSequence specific helper text"))
не забудьте makemigrations
, ваша help_text
должна быть добавлена в схему миграции.
Способ Обезьяноловки:
class DnaSequence(AbstractBioSequence):
some_dna_field = models.TextField()
DnaSequence._meta.get_field('description').help_text = _("DnaSequence specific helper text")
В более ранней версии это был метод get_field_by_name
. Подробнее об этом: https://docs.djangoproject.com/en/4.1/ref/models/meta/#django.db.models.options.Options.get_field
В этом искусстве изменений вы не должны получить никакой миграции.
Другие идеи:
- Вы можете переопределить текст справки поля формы. Это хорошо работает для ModelAdminForm. Подробнее здесь: https://docs.djangoproject.com/en/4.1/topics/forms/modelforms/#overriding-the-default-fields .
- Вы можете создать свою собственную модель help_text_model, и добавлять help_text на лету в поле с помощью Mixin.
- Много других способов...