Я хочу, чтобы поле ответа было равно полю (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")
Вернуться на верх