Рекомендуется проводить проверку как можно ближе к источнику. Реализация таких методов, как clean или save_model (в пределах Django Admin) проверяет на уровне сервера, что является последней линией защиты. Вы также можете использовать JavaScript, чтобы отключить кнопку отправки формы, если только выбранные наклонности не отличаются. Другой метод - использовать проверку формы в представлении:
from django.core.exceptions import ValidationError
from django import forms
class PawnForm(forms.Form):
primary_inclination = forms.CharField()
secondary_inclination = forms.CharField()
def clean(self):
# Assume posted data includes pinc (primary_inclination) and sinc (secondary inclination)
if 'pinc' in self.cleaned_data and 'sinc' in self.cleaned_data:
if self.cleaned_data['pinc'] == self.cleaned_data['sinc']:
raise forms.ValidationError(
("Primary and Secondary inclinations must be different"))
else:
raise forms.ValidationError(
("Both Primary and Secondary inclinations required"))
return self.cleaned_data
По вашему мнению, вы можете иметь что-то вроде:
from django.shortcuts import render, redirect
from django.urls import reverse
from django.views.generic.edit import FormView
class PawnView(FormView):
def get(self, request):
context = {}
context['form'] = PawnForm(request.POST or None)
return render(request, 'pawn.html', context)
def post(self, request):
context = {}
form = PawnForm(request.POST or None)
context['form'] = form
if form.is_valid():
# Form is valid...go ahead and process data
new_pawn = Pawn.create(form.cleaned_data.get(‘pinc’), form.cleaned_data.get(‘sinc’)
return redirect(reverse('pawn-view'))
else:
for k, v in form.errors.items():
# Retrieve the text of our validation error or you can simply use form.errors
context['error'] = v
return render(request, 'pawn.html', context)
Вы можете показать ошибку проверки в закладке. html очень легко:
<div class="pawn-error">
<h3>{{ error | striptags }}</h3>
</div>