以形式输入,然后将其与存储在 django 数据库中的值进行比较
Taking input in form and then comparing it with values stored in databse in django
我正在做一个项目,用户输入问题的答案,然后需要在单击提交按钮时检查用户输入。如果输入与存储在管理门户数据库中的答案相匹配,那么它应该将其重定向到一个新页面,否则它应该给出一个错误的错误答案。
发生的情况是,对于每个用户输入,我都被重定向到另一个页面。但即使输入的不是数据库答案中的输入,也不会显示错误答案。我该如何解决这个问题?
forms.py
from django import forms
from .models import Answer
from django.core.exceptions import ObjectDoesNotExist
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.filter(answer__contains=response)
except Answer.DoesNotExist:
raise forms.ValidationError("Wrong Answer")
models.py
from django.db import models
from django.contrib.auth import get_user_model
User=get_user_model()
users=User.objects.all()
class Answer(models.Model):
name=models.CharField(max_length=10,unique=True)
answer=models.CharField(max_length=100)
def __str__(self):
return self.name
class Meta:
ordering= ["-name"]
views.py
from django.shortcuts import render,redirect
from django.views.generic import *
from . import models
from django import forms
from .forms import CheckAnswer
def Arena1(request):
if request.method=='POST':
form = CheckAnswer(request.POST)
if form.is_valid():
return redirect('thanks')
else:
form=CheckAnswer()
return render(request,'levels/arena1.html',{'form':form})
Model Managers filter
方法不会引发 DoesNotExist
,你应该使用 Answer.objects.get(answer__contains=response)
来引发 DoesNotExist
,记住这也可以 return 一个 MultipleObjectsReturned
错误,如果有多个答案与您的回答匹配,filter
将只是 return 一个空列表。
另一种选择是使用 Answer.objects.filter(answer__contains=response).exists()
并检查 return 是对还是错。
我正在做一个项目,用户输入问题的答案,然后需要在单击提交按钮时检查用户输入。如果输入与存储在管理门户数据库中的答案相匹配,那么它应该将其重定向到一个新页面,否则它应该给出一个错误的错误答案。
发生的情况是,对于每个用户输入,我都被重定向到另一个页面。但即使输入的不是数据库答案中的输入,也不会显示错误答案。我该如何解决这个问题?
forms.py
from django import forms
from .models import Answer
from django.core.exceptions import ObjectDoesNotExist
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.filter(answer__contains=response)
except Answer.DoesNotExist:
raise forms.ValidationError("Wrong Answer")
models.py
from django.db import models
from django.contrib.auth import get_user_model
User=get_user_model()
users=User.objects.all()
class Answer(models.Model):
name=models.CharField(max_length=10,unique=True)
answer=models.CharField(max_length=100)
def __str__(self):
return self.name
class Meta:
ordering= ["-name"]
views.py
from django.shortcuts import render,redirect
from django.views.generic import *
from . import models
from django import forms
from .forms import CheckAnswer
def Arena1(request):
if request.method=='POST':
form = CheckAnswer(request.POST)
if form.is_valid():
return redirect('thanks')
else:
form=CheckAnswer()
return render(request,'levels/arena1.html',{'form':form})
Model Managers filter
方法不会引发 DoesNotExist
,你应该使用 Answer.objects.get(answer__contains=response)
来引发 DoesNotExist
,记住这也可以 return 一个 MultipleObjectsReturned
错误,如果有多个答案与您的回答匹配,filter
将只是 return 一个空列表。
另一种选择是使用 Answer.objects.filter(answer__contains=response).exists()
并检查 return 是对还是错。