Я пытаюсь создать форму с настраиваемыми полями (в двух словах: форма для ответа на ряд вопросов, часть Quizz. вопросы администрируются с помощью администратора Django, теперь мне нужно иметь форму, чтобы разрешить отправку на нее).Django: настраиваемые поля, не отображающие ошибки при создании/снятии полей
Я понимаю, что в файле шаблона я должен делать «для поля в форме», а не «для поля в form.fields».
Однако переборе формы непосредственно возвращает ошибку: объект «WSGIRequest» не имеет атрибута «получить». Эта ошибка возникает в django's data.get() (вызываемая функцией field.widget.value_from_datadict()) при попытке визуализации {{field}}.
Я понимаю, что имею дело с несвязанными полями, но не вижу, что я делаю сейчас неправильно. Любые подсказки по поводу проблемы? благодаря
в forms.py
class ResponseSetForm(forms.Form):
def __init__(self, request=None, instance=None, *args, **kwargs):
self.title = "TOTO"
quizz = kwargs.pop('quizz')
super(ResponseSetForm, self).__init__(request, instance, *args, **kwargs)
question_list = quizz.mcquestion_set.all().order_by('position')
fields={}
theChoices=quizz.rating_scale.mcqrating_set.all().order_by('value')
choices = ((x.value, x.label) for x in theChoices)
for question in question_list:
fieldname = 'question_%s' % question.identifier
widget = RadioSelect()
self.fields[fieldname] = forms.TypedChoiceField(coerce=int, empty_value=None, required=True, label=question.text, choices=choices, widget=widget)
в views.py
class QuizzView(FormView):
http_method_names = ['get', 'post']
template_name = 'test.html'
form_class = ResponseSetForm
success_url = "/"
def get_form_kwargs(self, *args, **kwargs):
#used by the form
kwargs = super(QuizzView, self).get_form_kwargs()
kwargs.update({
'request' : self.request,
'quizz' : self.quizz
})
return kwargs
def dispatch(self, request=None, *args, **kwargs):
# parse the request here ie.
self.request = request
self.quizz = Quizz.objects.prefetch_related('rating_scale', 'mcquestion_set').get(pk=kwargs['pk'])
# call the view
return super(QuizzView, self).dispatch(request, *args, **kwargs)
в файле шаблона test.html:
{% if quizz %}
<form action="/mcq/2/" method="post">{% csrf_token %}
<h2>{{ form.title }}
<table>
{% for field in form %}
<tr>
<td>{{ field.label }}</td>
<td>{{ field }}</td>
</tr>
{% endfor %}
</table>
<p><input type="submit" value="Submit" /></p>
</form>
{% else %}
<p>No questions are available.</p>
{% endif %}
шаблон URL является:
url(r'^(?P<pk>\d+)', QuizzView.as_view(), name='run_quizz')
В моем контексте, что, вероятно, делает взгляды класса на основе не очень подходит по сравнению с доброй старой функцией. – lai