请向我解释如何匹配django中特定问题的答案。 现在,我面临的问题是,如果用户在Answer数据库中退出,则无论用户在表单中输入的内容均返回True,但是我想要的是,用户输入的内容应与该特定问题的Answer匹配,而不是任何存在的答案。
models.py
from django.db import models
from django.contrib.auth import get_user_model
from PIL import Image
User=get_user_model()
# Create your models here.
class Question(models.Model):
question_name=models.CharField(max_length=20,unique=True,default=' ')
question_image=models.ImageField(upload_to='levels/')
question_text=models.TextField(blank=True,max_length=100)
def __str__(self):
return str(self.question_name)
class Meta:
ordering= ["question_name"]
class Answer(models.Model):
question_relation=models.ForeignKey(Question,on_delete=models.CASCADE)
answer=models.CharField(max_length=100,unique=True)
def __str__(self):
return self.answer
forms.py
from django import forms
from .models import Answer,Question
from django.core.exceptions import ObjectDoesNotExist
from . import views
class CheckAnswer(forms.Form):
your_answer=forms.CharField(label='Answer')
def clean(self):
cleaned_data=super(CheckAnswer,self).clean()
response=cleaned_data.get("your_answer")
try:
p = Answer.objects.get(answer__iexact=response)
except Answer.DoesNotExist:
raise forms.ValidationError("Wrong Answer.")
views.py
from django.shortcuts import render,redirect,get_object_or_404
from django.views.generic import *
from . import models
from django import forms
from .forms import CheckAnswer
from django.contrib.auth.decorators import login_required
from .models import Question
from dashboard.models import UserLoggedIn
# Create your views here.
@login_required
def Arena1(request):
if request.method=='POST':
form = CheckAnswer(request.POST)
if form.is_valid():
return redirect('thanks')
else:
form=CheckAnswer()
args={'form':form}
return render(request,'levels/arena1.html',args)
我认为将使用pk的概念,但我不知道如何实现 请更新我的代码以解决此问题。
答案 0 :(得分:0)
首先,匹配问题将要求您存储以某种方式向功能提供问题。您可以使用全局变量或容器来执行此操作,在呈现问题时可以在其中设置值,然后将其导入forms.py并设置your_question = Question
forms.py
from django import forms
from .models import Answer,Question
from django.core.exceptions import ObjectDoesNotExist
from . import views
class CheckAnswer(forms.Form):
your_answer=forms.CharField(label='Answer')
def clean(self):
cleaned_data=super(CheckAnswer,self).clean()
response=cleaned_data.get("your_answer")
try:
p = Answer.objects.get(answer__iexact=response)
if(your_answer == p.answer and your_question == p.question_relation.question_text): #user inputs should be matched with the Answer of that particular Question
#Code To Run for Correct Answer Goes Here
else:
#The Answer is Wrong or Does not Match the Particular Question
raise forms.ValidationError("Wrong Answer.")
except Answer.DoesNotExist:
raise forms.ValidationError("Wrong Answer.")