новичок в полевых условиях и борьба с проверкой формы на практике. Я создал форму, которую я использую в качестве ввода данных для поиска в БД. Проверка формы запускается только для первого поля, в то время как другие, кажется, не принимаются во внимание, ниже код:
Описание формы:
class SearchForm(forms.Form):
cnp_nbr = forms.IntegerField(label='CNP', widget=forms.TextInput(attrs={'class': 'form-control' }), required=False)
first_name = forms.CharField(label='First Name', widget=forms.TextInput(attrs={'class': 'form-control'}), required=False)
last_name = forms.CharField(label='Last Name', widget=forms.TextInput(attrs={'class': 'form-control'}), required=False)
class Meta():
model = Clients
fields = ('cnp_nbr','first_name','last_name')
def clean(self): # most used!!!
all_clean_data = super().clean()
cnp_nbr = all_clean_data['cnp_nbr']
first_name = all_clean_data['first_name']
last_name = all_clean_data['last_name']
if cnp_nbr is None or (first_name is None and last_name is None):
raise forms.ValidationError("Enter f1 or f2&f3")
super().clean()
Просмотры:
class ClientsSearch(generic.FormView):
form_class = forms.SearchForm
template_name = "administration/clients_search.html"
success_url = reverse_lazy('administration:searchresults')
def form_valid(self, form):
self.request.session['cnp_nbr'] = form.cleaned_data['cnp_nbr']
self.request.session['first_name'] = form.cleaned_data['first_name']
self.request.session['last_name'] = form.cleaned_data['last_name']
return super().form_valid(form)
class SearchResults (generic.ListView):
model = models.Clients
template_name='administration/search_results.html'
context_object_name = 'all_search_results'
def get_queryset(self):
return self.model.objects.filter(
Q(cnp_nbr__exact=self.request.session['cnp_nbr']) | Q(first_name__exact=self.request.session['first_name']) & Q(last_name__exact=self.request.session['last_name'])
)
HTML для формы поиска:
<form method="POST" >
{% csrf_token %}
{{ form.as_p }}
<button class="btn btn-primary" id="search_submit" name = "search_submit" type="submit" > Search</button>
</form>
Проверка работает только для cnp_nbr, я даже проверял их один за другим. Это работает:
if cnp_nbr is None:
raise forms.ValidationError("Enter field")
Это не
if first_name is None:
raise forms.ValidationError("Enter field")
Поиск работает просто отлично! Заранее спасибо