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

В этом искусстве изменений вы не должны получить никакой миграции.

Другие идеи:

  1. Вы можете переопределить текст справки поля формы. Это хорошо работает для ModelAdminForm. Подробнее здесь: https://docs.djangoproject.com/en/4.1/topics/forms/modelforms/#overriding-the-default-fields
  2. .
  3. Вы можете создать свою собственную модель help_text_model, и добавлять help_text на лету в поле с помощью Mixin.
  4. Много других способов...
Вернуться на верх