Как получить help_text для пользовательского Django ModelChoiceField

Я создаю пользовательский ModelChoiceField, поэтому я могу отображать пользовательские метки для своих иностранных ключ, но при этом Django больше не отображает help_text в форме. Как я могу вернуть текст справки?

models.py

class Event(models.Model):

    title = models.CharField(max_length=120)
    category = models.ForeignKey(Category, default=Category.DEFAULT_CATEGORY_ID, on_delete=models.SET_NULL, null=True,
                                 help_text="By default, events are sorted by category in the events list.")

forms.py

class CategoryModelChoiceField(forms.ModelChoiceField):
    def label_from_instance(self, obj):
        return "%s (%s)" % (obj.name, obj.description)

class EventForm(forms.ModelForm):

    category = CategoryModelChoiceField(
        queryset=Category.objects.all(),
    )

    class Meta:
        model = Event
        fields = [...]

person 43Tesseracts    schedule 23.05.2018    source источник
comment
Передайте help_text в качестве аргумента CategoryModelChoiceField. Возможно, вы можете получить к нему доступ как help_text=self._meta.model.category.help_text или что-то подобное.   -  person dan-klasson    schedule 24.05.2018


Ответы (2)


С помощью комментария под вопросом, вот как я получил свое пользовательское поле формы, чтобы получить текст справки по умолчанию из модели:

class EventForm(forms.ModelForm):
    category = CategoryModelChoiceField(
        queryset=Category.objects.all(),
        help_text=Event._meta.get_field('category').help_text,
)
person 43Tesseracts    schedule 29.05.2018

Вы можете добавить его внутрь Meta.

from django.utils.translation import gettext_lazy as _

class AuthorForm(ModelForm):
    class Meta:
        model = Author
        fields = ('name', 'title', 'birth_date')
        labels = {
            'name': _('Writer'),
        }
        help_texts = {
            'name': _('Some useful help text.'),
        }
        error_messages = {
            'name': {
                'max_length': _("This writer's name is too long."),
            },
        }

См. документацию по django.

Кроме того, вы можете добавить с помощью метода __init__.

class EventForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        super(EventForm, self).__init__(*args, **kwargs)
        self.fields['category'].help_text = ''
person seuling    schedule 24.05.2018
comment
Как насчет получения текста справки, который уже существует в поле модели? - person 43Tesseracts; 24.05.2018