2014-04-13 46 views
0

我是相当新的Django和Python,并有以下问题:Python的Django,提交多个表单

我有一个测验与多个答案。 每个答案都有一个附加到它的表单,它将数据发布到从模型创建对象的视图。 但我不能发布所有表格,因为它只发布第五个。

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.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()" /> 
+0

请再检查一下你的Python的缩进。另外,你可以发布模板生成的HTML(它可能有助于看到如何提交生成) – BorrajaX

回答

0

我想你应该重新设计你的程序。我的理解是,form submission只能处理一种形式。以下是使用Django/Python的一些变通方法。但是,对于你的情况,如果你正在设计一个测验,所有的答案应该是一个单一的形式的一部分。而不是返回{% for Frage in Frage %}我会做这样的事情(你必须首先重新设计你的模型和视图):

//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" /> 
+0

http://stackoverflow.com/questions/15124567/how-do-i-submit-multiple-forms-with-a -single-submit-button-in-django是用Django提交多个表单的另一个例子。我投票重新设计。 – rofls