ich dieses Problem durch die Verwendung modelForms für die Erstellung von Fragen angehen würde, und dann auf eine Seite umgeleitet, wo Sie die Anzahl der Fragen hinzufügen können, den Sie bei der Frage erstellt. Diese add_answers
Seite verwendet keine Django-Formulare, wir können einfach ein einfaches HTML-Formular verwenden und dann die Formulardaten in der Ansicht abrufen. Hier sind die Ansichten:
views.py:
from django.shortcuts import render, redirect
from .forms import QuestionForm
from .models import Question, Answer
# Create your views here.
def add_question(request):
form = QuestionForm(request.POST or None)
if request.method == "POST":
if form.is_valid():
question = form.cleaned_data.get('question')
number_of_answers = form.cleaned_data.get('number_of_answers')
create_question = Question.objects.create(question=question, number_of_answers=number_of_answers)
create_question.save()
return redirect('home:add-answers', id=create_question.id)
return render(request, 'home/add_question.html', {'form': form})
def add_answers(request, id):
question = Question.objects.get(id=id)
if request.method == "POST":
for i in request.POST.getlist('answers'):
_ = Answer.objects.create(answer=i, question=id)
_.save()
num_answers = question.number_of_answers
context = {"num_answers":range(num_answers), 'question':question}
return render(request, 'home/add_answers.html', context)
verwendet Vordrucke:
forms.py:
from django import forms
from .models import Question, Answer
class QuestionForm(forms.ModelForm):
class Meta:
model = Question
fields = ['question','number_of_answers']
Wir dieses Formular zugreifen können die Vorlage:
<form method="POST" action=".">
{{ form }}
{% csrf_token %}
<input type="submit">Submit</input>
</form>
Für add_answers
wir Sie wie folgt vor:
<form method="POST" action=".">
{% for i in num_answers %}
<input type="text" name="answers"></input>
<br />
{% endfor %}
{% csrf_token %}
<input type="submit">Submit</input>
</form>
Wo num_answers
ist eine Kontextvariable, die range(number_of_answers)
ist.
Edit: hier ist die urls.py file:
from django.conf.urls import url, include
from . import views
urlpatterns = [
url(r'^add-answers/(?P<id>\d+)/$', views.add_answers, name="add-answers"),
url(r'^add-question/$', views.add_question, name="add-question"),
]
Hallo, danke für Ihre Antwort. Ich habe Ihren Vorschlag ausprobiert und erhalte eine NoReverseMatch-Ausnahme, die besagt: "\t Reverse für 'add_answers' nicht gefunden. 'Add_answers' ist keine gültige Ansichtsfunktion oder kein Mustername." Weißt du vielleicht, warum ich diesen Fehler bekomme? – km786
@ km786 Ich habe meine Antwort mit ** urls.py ** aktualisiert. Der Fehler könnte von 'return redirect ('home: add-answers', id = create_question.id) 'kommen, wenn Sie nicht den Namen' add-answer 'in urls.py gesetzt haben. Ich hoffe, dass hilft, lass es mich wissen, wenn du mehr Klarheit brauchst. Danke – briancaffey
Hallo! Vielen Dank! Es funktioniert jetzt! – km786