Я хочу, чтобы поле ответа было равно полю (one)options. Я пробовал, но ничего не получилось?
#forms.py from django.forms import ModelForm from .models import Question
class QuestionForm(ModelForm):
class Meta:
model = Question
fields = "__all__"
def clean_answer(self):
answer = self.cleaned_data['answer']
option1 = self.cleaned_data['option1']
option2 = self.cleaned_data['option2']
option3 = self.cleaned_data['option3']
option4 = self.cleaned_data['option4']
# print(answer,option1,option2, option3,option4)
# return answer
if answer == option1 or answer == option2 or answer == option3 or answer == option4:
return answer
#views.py class AddQuestion(View):
def post(self, request):
forms = QuestionForm(request.POST)
if forms.is_valid:
forms.save()
messages.success(request, 'Successfully Added')
else:
messages.error(request, 'Answer must be equal to the choices')
return redirect(reverse('home'))
def get(self, request):
forms = QuestionForm()
context = {'forms': forms}
return render(request,'file/addQuestion.html',context)
#AddQuestion.html
{% extends 'file/base.html' %}
{% block title %}
AddQuestion
.
{% endblock %}
{% block body %}
<div class = 'container mt-5 pt-6'>
<div class = 'col-md-5 mx-auto'>
<h3>Add Question: </h3>
<form method="POST" action="" >
{% for msg in messages %}
{{ msg }}
{% endfor %}
{% csrf_token %}
{{forms.as_p}}
<input type = 'submit' value = 'Submit'>
</form>
</div>
</div>
{% endblock %}
Я думаю, что ваша проблема заключается в подтверждении ошибки. В методе clean__answer
отсутствует ошибка raise. Так что если никакие условия не выполняются, то вы не вернете очищенные данные, как в этой строке:
return answer
У вас должно быть что-то вроде этого:
if answer == option1 or answer == option2 or answer == option3 or answer == option4:
return answer
else:
raise ValidationError("Select an answer from the options.")
Таким образом, если условия выполнены, то вы вернете очищенное поле, в противном случае вы вызовете ошибку, которую вы можете позже или поймать и показать ее в представлении.
if answer == option1 or answer == option2 or answer == option3 or answer == option4:
return answer
raise ValidationError("Answer must be from one of the options")