Пользовательская метка в наборе форм Django

#django #django-templates #django-forms #formset

#django #django-шаблоны #django-forms #набор форм

Вопрос:

Как мне добавить пользовательские метки в мой набор форм?

 <form method="post" action="">

    {{ formset.management_form }}
    {% for form in formset %}
        {% for field in form %}
            {{ field.label_tag }}: {{ field }}
        {% endfor %}
    {% endfor %}
</form>
  

Моя модель:

 class Sing(models.Model):
song = models.CharField(max_length = 50)
band = models.CharField(max_length = 50)
  

Теперь в шаблоне вместо метки поля есть 'song' , как мне настроить ее так, чтобы она отображалась как 'What song are you going to sing?' ?

Комментарии:

1. Что вы подразумеваете под «пользовательскими метками»? Как они должны выглядеть? Где они должны отображаться? В чем смысл этого извлечения шаблона?

2. извините за неясность. просмотреть изменения?

Ответ №1:

Вы можете использовать label аргумент в своей форме:

 class MySingForm(forms.Form):
    song = forms.CharField(label='What song are you going to sing?')
    ...
  

Если вы используете ModelForms :

 class MySingForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(MySingForm, self).__init__(*args, **kwargs)
        self.fields['song'].label = 'What song are you going to sing?'
  
    class Meta:
        model = Sing
  

Обновить:

(Комментарий@Daniel Roseman)

Или в модели (с использованием verbose_name ):

 class Sing(models.Model):
    song = models.CharField(verbose_name='What song are you going to sing?',
                            max_length=50)
    ...
  

или

 class Sing(models.Model):
    song = models.CharField('What song are you going to sing?', max_length=50)
    ...
  

Комментарии:

1. я получаю TypeError: __init__() got an unexpected keyword argument 'label'

2. label должна быть verbose_name , или просто используйте первый позиционный аргумент.

3. Ответ обновлен. label аргумент используется только с Form полями, а не с Model fields (моя ошибка). Можете ли вы опубликовать свое определение формы, чтобы я мог предоставить вам 100% рабочее решение?

4. Я использовал ModelForm class SingForm(ModelForm): Class Meta: model = Sing

5. Решение с verbose_name в поле model должно сработать.