Django: Как получить доступ к отображаемому значению ChoiceField в шаблоне, учитывая фактическое значение и выбор?
У меня есть ChoiceField в связанной форме, выбор которой:
[('all', 'All users'), ('group', 'Selected groups'), ('none', 'None')]
В шаблоне у меня нет проблем с доступом к его связанному значению (фактическое значение, которое нужно сохранить, первый элемент каждого кортежа) и выбор. Имея эти данные в руках, я знаю, что должен иметь доступ к отображаемым значениям или ко второму элементу каждого кортежа. Но как я могу сделать это в шаблоне? Спасибо.
Ответы
Ответ 1
Я сомневаюсь, что это можно сделать без специального тега шаблона или фильтра.
Пользовательский шаблонный фильтр мог бы выглядеть:
@register.filter
def selected_choice(form, field_name):
return dict(form.fields[field_name].choices)[form.data[field_name]]
Ответ 2
Используйте свойство get_FOO_display.
** Изменить **
Oups! Быстрое редактирование этого ответа, прочитав комментарии ниже.
bound_form['field'].value()
Должно работать в соответствии с этим набором изменений
Ответ 3
Отметьте эту ссылку - https://docs.djangoproject.com/en/dev/ref/models/instances/#django.db.models.Model.get_FOO_display
Вы можете использовать эту функцию, которая вернет отображаемое имя - ObjectName.get_FieldName_display()
Замените ObjectName своим именем класса и полем FieldName, в поле которого вам нужно получить отображаемое имя.
Ответ 4
У меня есть контактная форма, использующая представление класса FormView
. Форма контакта имеет несколько полей ChoiceField
. Я не храню данные в базе данных; просто отправляя их по электронной почте владельцу сайта. Это то, что я закончил:
def form_valid(self, form):
for field in form.fields:
if hasattr(form[field].field, 'choices'):
form.cleaned_data[field + '_value'] = dict(form[field].field.choices)[form.cleaned_data[field]]
...
Ответ 5
Если вы используете {{ form.instance.field }}
в шаблоне формы, он должен отображать отображаемое имя выбранного выбора
Ответ 6
в моделях
STATUS_CHOICES = (
(0, _("Draft")),
(1, _("Started")),
(2, _("Stopped")),
)
class Study(models.Model):
status = models.PositiveSmallIntegerField(choices=STATUS_CHOICES, default=0)
@property
def get_status(self):
return STATUS_CHOICES[self.status][1]
в вашем шаблоне (где вы передали экземпляр модели как объект)
{{ object.get_status }}