Django: Как получить доступ к отображаемому значению ChoiceField в шаблоне с учетом фактического значения и выбора? - PullRequest
12 голосов
/ 08 декабря 2011

У меня есть ChoiceField в связанной форме, чей выбор:

[('all', 'All users'), ('group', 'Selected groups'), ('none', 'None')]

В шаблоне у меня нет проблем с доступом к его связанному значению (фактическому значению, которое будет сохранено; первый элемент каждого кортежа) и к выбору. Имея эти данные в руках, я знаю, что смогу получить доступ к отображаемым значениям или второму элементу каждого кортежа. Но как я могу сделать это в шаблоне? Спасибо.

Ответы [ 6 ]

12 голосов
/ 08 декабря 2011

Я сомневаюсь, что это можно сделать без специального тега шаблона или фильтра. Пользовательский шаблонный фильтр может выглядеть так:

@register.filter
def selected_choice(form, field_name):
    return dict(form.fields[field_name].choices)[form.data[field_name]]
4 голосов
/ 08 декабря 2011

Используйте свойство get_FOO_display .

** Редактировать **

Упс!Быстрое редактирование этого ответа после прочтения комментариев ниже.

bound_form['field'].value()

Должно работать в соответствии с этим набором изменений

1 голос
/ 06 декабря 2018

в моделях

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 }}
0 голосов
/ 22 января 2018

Если вы используете {{ form.instance.field }} в шаблоне формы, в нем должно отображаться выбранное отображаемое имя

0 голосов
/ 06 марта 2015

У меня есть контактная форма, использующая представление 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]]

    ...
0 голосов
/ 06 марта 2012

Проверить эту ссылку - https://docs.djangoproject.com/en/dev/ref/models/instances/#django.db.models.Model.get_FOO_display

Вы можете использовать эту функцию, которая будет возвращать отображаемое имя - ObjectName.get_FieldName_display ()

Замените ObjectName именем вашего класса, а FieldName - полем, из которого вам нужно получить отображаемое имя.

...