Я прочитал cleaning and validating fields that depend on each other. Однако я все еще не могу заставить свою чистую функцию работать в браузере. В настоящее время он ничего не делает. Что мне не хватает?Django: зависимые от поля
forms.py
from django import forms
from incidents.models import *
import datetime
from django.utils import dateparse
from django.utils import timezone
from functools import partial
DateInput = partial(forms.DateInput, {'class': 'datepicker'})
from django.core.exceptions import ValidationError
class IncidentSearchForm(forms.Form):
start_date = forms.DateField(
label="Incident Date Occurs Between",
required=False,
widget=DateInput()
)
end_date = forms.DateField(
label="And",
required=False,
widget=DateInput()
)
def clean(self):
cleaned_data = super(IncidentSearchForm, self).clean()
start_date = cleaned_data.get("start_date")
end_date = cleaned_data.get("end_date")
if start_date or end_date:
raise forms.ValidationError(
"Both date fields are required if trying to search by date."
)
if end_date < start_date:
raise forms.ValidationError(
"End date should be greater than start date."
)
def search(self):
start_date = self.cleaned_data.get('start_date')
end_date = self.cleaned_data.get('end_date')
query = Incident.objects.all()
if start_date is not None:
query = query.filter(start_date=self.cleaned_data.get('start_date'))
if end_date is not None:
query = query.filter(end_date=self.cleaned_data.get('end_date')
return(query)
views.py
@login_required(login_url='/login/')
def index(request):
template = "index.html"
form = IncidentSearchForm(request.GET)
if 'open' in request.GET:
if form.is_valid():
incident_list = form.search()
context = { "form": form,
"incident_list": incident_list}
return render(request, template, context)
else:
context = { "form": form }
return render(request, template, context)
else:
form = IncidentSearchForm()
incident_list = Incident.objects.filter(open = 'True').order_by('-incident_date_reported')
context = { "form": form,
"incident_list": incident_list}
return render(request, template, context)
Вам нужно будет показать свое мнение. И ваш чистый метод должен возвращать все 'cleaned_data', а не только start_date. –
обновил его. Благодарю. – user1807271
Я думаю, что моя проблема в том, что я не возвращаю 'cleaned_data' – user1807271