2017-02-08 2 views
0

Wie alle Optionen von dem Formular in Django eingereicht, das ist das Formular, das ich verwendet habe.So erhalten Sie alle Optionen von Formular gesendet

{% extends 'quiz/base.html' %} 
{% block content%} 
<h1>You are at quiz page</h1> 

<form action="{% url 'quiz:process_data' %}" method="post"> 
    {% csrf_token %} 
    {% for question in question_set %} 
     <h3>{{question.id}}.{{question.question_text }}</h3> 
     {% for option in question.options_set.all %} 
      <input type="radio" name="choice{{question.id}}" value="{{ option.options}}" > {{option.options}}<br> 
     {% endfor %} 
    {% endfor %} 
    <input type="Submit" name="Submit"> 
</form> 
{% endblock%} 

Ich versuchte selected_choice=request.POST, aber das csrfmiddlewaretokenchoice1Submitchoice3 als Ausgabe zu bekommen. Wie kann ich das lösen? Danke

+1

Request.POST ist ein Wörterbuch. Also einfach 'request.POST.get ('form_field_name')' –

+0

Bitte posten Sie Ihre form.py. –

Antwort

2

In django request.POST ist Dictionary-ähnliches Objekt, siehe Details here. So Argument Wahl in Perspektive zu betrachten Sie folgende Syntax verwenden:

selected_choice=request.POST.get('choice') 

die choice Wert oder None bei Rückkehr dieser leer ist.

Da request.POST ist dict-ähnliches Objekt Sie items() Methode verwenden können, um alle Werte zu erhalten und filtern sie:

for k, v in request.POST.items(): 
    if k.startswith('choice'): 
     print(k, v) 

dies nur dem Namen nach, jene params mit choice Text gedruckt wird.

0
selected_choice=request.POST.get('choice') 

Die oben sollte gut funktionieren, aber wenn Sie verrückt sind, können Sie diese versuchen:

{% extends 'quiz/base.html' %} 
{% block content%} 
<h1>You are at quiz page</h1> 

<form action="{% url 'quiz:process_data' %}" method="post" id= "crazyform"> 
    {% csrf_token %} 
    {% for question in question_set %} 
     <h3>{{question.id}}.{{question.question_text }}</h3> 
     {% for option in question.options_set.all %} 
      <input type="radio" name="choice" value="{{ option.options}}" > {{option.options}}<br> 
     {% endfor %} 
    {% endfor %} 
    <input type="hidden" name="crazychoice" class="crazy" value="nothing"> 
    <input type="Submit" name="Submit"> 
</form> 
{% endblock%} 

dann einige JQuery:

$('#crazyform input').on('change', function() { 
$(".crazy").val($('input[name=choice]:checked', '#crazyform').val())}) 

Jedesmal klicken, um ein Optionsfeld , ändert sich der Wert des ausgeblendeten Eingabefelds in den Wert des ausgewählten Optionsfelds.

dann Ihrer Ansicht nach können Sie:

selected_choice = request.POST.get("crazychoice", "") 
Verwandte Themen