Вы можете переопределить поля вашей формы в __init__
, чтобы включить forms.ChoiceField
:
class NextresponseForm(ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['policy_1_rank'] = forms.ChoiceField(
choices=self._meta.model.POLICY_1_CHOICES)
class Meta:
model = Temporaryresponse
fields = ['policy_1_rank', 'policy_2_rank',...]
Обновление
Самый простой способ визуализации объекта формыв Django это передать его как контекст в вашем представлении:
def some_view(request):
form = NextresponseForm(request.POST or None)
context = {'form':form}
return render(request, 'some_template.html', context)
Затем вы можете получить доступ к форме, позвонив form.as_ul
в вашем шаблоне:
<ul>
{{ form.as_ul }}
</ul>
Обновление 2
Последняя строка в ваших представлениях неверна:
return render(request, 'politicalexperimentpollapp/nr.html', {'tempresponse': tempresponse}, {'form': form})
Вместо этого должно быть:
return render(request, 'politicalexperimentpollapp/nr.html', {'tempresponse': tempresponse, 'form': form})
context
- это словарь . Если вам нужно передать несколько элементов в шаблон, вам нужно включить в контекстный словарь несколько ключей, а не несколько аргументов.
Наконец, я бы рекомендовал всегда инициализировать формы с помощью request.POST or None
, чтобы не сделать вашу форму недействительной:
form = TemporaryresponseForm(request.POST or None)
Это ответ из учебника на часто задаваемый вопрос «Почему form.is_valid()
всегда недействителен?» .