Python Django,提交多个表单
我是Django和Python的新手,有以下问题: 我有一个多答案的测验。 每个答案都附有一个表单,该表单将数据发布到从模型创建对象的视图中。 但是我不能发布所有的表格,因为它只发布了第五张表格 views.py:Python Django,提交多个表单,python,django,Python,Django,我是Django和Python的新手,有以下问题: 我有一个多答案的测验。 每个答案都附有一个表单,该表单将数据发布到从模型创建对象的视图中。 但是我不能发布所有的表格,因为它只发布了第五张表格 views.py: def quiz(request, quiz_id=1): cs = {} cs.update(csrf(request)) height=75*Frage.objects.count() height_menu = height + 10 if Frage.objects.cou
def quiz(request, quiz_id=1):
cs = {}
cs.update(csrf(request))
height=75*Frage.objects.count()
height_menu = height + 10
if Frage.objects.count() == 0:
height = 170
height_menu = height
len_quiz = len(Quiz.objects.get(id=quiz_id).title)
count=Frage.objects.filter(quiz=quiz_id).count
count_aw = 0
aw = Frage.objects.filter(quiz=quiz_id)
cs.update({'quiz': Quiz.objects.get(id=quiz_id),
'Frage': Frage.objects.filter(quiz=quiz_id),
'len': len_quiz,
'hg': height,
'hg_m': height_menu,
'user': request.user,
'aw': Antwort.objects.all(),
'count': count,
'count_aw': count_aw})
return render_to_response('quiz.html', cs)
def check_view(request):
check = request.POST.get('aw_check', '')
user_id = request.POST.get('user_log', '')
user_act = User.objects.get(id=user_id)
frage_id = request.POST.get('frage', '')
frage = Frage.objects.get(id=frage_id)
antwort_id = request.POST.get('antwort', '')
antwort = Antwort.objects.get(id=antwort_id)
richtig = request.POST.get('richtig', '')
quiz_id = request.POST.get('quiz', '')
quiz = Quiz.objects.get(id=quiz_id)
res = Results(quiz=quiz, frage=frage, user=user_act, richtig=richtig, choice=check, aw=antwort)
res.save()
return HttpResponseRedirect('/quiz/all/')
模板:
{% if Frage.count == 0 %}
<br>
<h1 id="main_link" style="text-align: center" align="center">Keine Fragen vorhanden!</h1>
{% endif %}
<ol>
{% for Frage in Frage %}
<li><div id="frage">{{Frage.content}}</div></li>
{% for aw in Frage.antworten.all %}
<form action="/quiz/check/" name="{{ aw.content }}" method="post">{% csrf_token %}
<label for="aw_check">{{ aw.content }}</label>
<input type="checkbox" name="aw_check" id="aw_check">
<input type="hidden" name="user_log" value="{{ user.id }}">
<input type="hidden" name="frage" value="{{ Frage.id }}">
<input type="hidden" name="antwort" value="{{ aw.id }}">
<input type="hidden" name="quiz" value="{{ quiz.id }}">
{% if aw.richtig %}
<input type="hidden" name="richtig" value=True>
{% else %}
<input type="hidden" name="richtig" value=False>
{% endif %}
<input type="submit" value="Abgeben" />
<br>
</form>
{% endfor %}
{% endfor %}
</ol>
<script language="javascript">
function call_submitforms(){
{% for Frage in Frage %}
{% for aw in Frage.antworten.all %}
setTimeout("document.{{ aw.content }}.submit()",1000);
{{ check.it }}
{% endfor %}
{% endfor %}
}
</script>
<input type="button" value="Abschicken" onclick="call_submitforms()" />
{%if Frage.count==0%}
基恩·弗雷根·沃汉登!
{%endif%}
{Frage%中的Frage为%1}
{{Frage.content}
{Frage.antworten.all%中aw的百分比]
{%csrf_令牌%}
{{aw.content}}
{%if aw.richtig%}
{%else%}
{%endif%}
{%endfor%}
{%endfor%}
函数调用_submitforms(){
{Frage%中的Frage为%1}
{Frage.antworten.all%中aw的百分比]
setTimeout(“document.{aw.content}}.submit()”,1000);
{{check.it}}
{%endfor%}
{%endfor%}
}
我认为你应该重新设计你的程序。我的理解是,它只能处理一种形式。下面是一些使用的变通方法。但是,就你的情况而言,如果你在设计一个测验,所有的答案都应该是单一表格的一部分。我不想返回{%forfrage in Frage%}
我会这样做(您必须首先重新设计您的模型和视图):
//一个表单包含所有问题
form action=“/quick/check/”name=“{{aw.content}}”method=“post”>{%csrf\u token%}
//将问题列为表格的一部分
{%用于测验中的碎片。碎片%}
{%endfor%}
//以一种形式提交测验每页的所有数据
{%else%}
{%endif%}
请检查python的缩进。另外,能否发布模板生成的HTML(这可能有助于查看提交是如何生成的)是使用Django提交多个表单的另一个示例。不过我投票赞成重新设计。
//one form contains all questions
form action="/quiz/check/" name="{{ aw.content }}" method="post">{% csrf_token %}
//list the questions as part of that form
{%for Frage in quiz.Frages%}
<input type="hidden" name="user_log" value="{{ user.id }}">
<input type="hidden" name="antwort" value="{{ aw.id }}">
<input type="hidden" name="quiz" value="{{ frage.id }}">
{% endfor %}
//submit all of the data for each page of the quiz in one form
<input type="hidden" name="richtig" value=True>
{% else %}
<input type="hidden" name="richtig" value=False>
{% endif %}
<input type="submit" value="Abgeben" />