Итак, у меня есть простой просмотр списка и переопределение набора запросов, чтобы включить поля формы, чтобы пользователь мог искать конкретные доступные элементы.
Для фильтрации результатов списка я использую; request.method == 'GET', я знаю, что могу проверить, являются ли какие-либо поля пустыми и показать все результаты или нет.
У меня проблемы с использованием DateField (), когда я не использую формат даты "ГГГГ / ММ / ДД", Django выдает ошибку ValidationError;
["Значение 02/10/2019" имеет недопустимый формат даты. Оно должно быть в
ГГГГ-ММ-ДД. "]
Как мы можем проверить ввод пользователя с помощью request.method == 'GET'? (аналогично использованию "clean_method" на POST)
Заранее спасибо!
views.py
class BookingListView(generic.ListView):
model = Item
template_name = 'booking.html'
def get_queryset(self):
from_date = self.request.GET.get('from_date')
to_date = self.request.GET.get('to_date')
guests_qty = self.request.GET.get('guests_qty')
booked = (
Q(booking__from_date__gte=from_date) |
Q(booking__to_date__lte=to_date)
)
if from_date and to_date and guests_qty:
return Item.objects.filter(persons=guests_qty).exclude(booked)
elif from_date and to_date:
return Item.objects.exclude(booked)
else:
return Item.objects.all()
HTML
<form action="{% url 'availability' %}" method="GET" novalidate>
<formset>
<legend><h6>Available items</h6></legend>
<div class="row">
<div class="input-field col s12">
<input id="id_from_date" type="text" name="from_date" autocomplete="off">
<label class="" for="id_from_date">Arrival:</label>
</div>
<div class="input-field col s12">
<input id="id_to_date" type="text" name="to_date" autocomplete="off">
<label class="" for="id_to_date">Departure:</label>
</div>
<div class="input-field col s5">
<input id="id_guests_qty" type="number" min="1" max="5" name="guests_qty" autocomplete="off">
<label class="" for="id_guests_qty">Persons:</label>
</div>
<div class="input-field col s12">
<button class="btn" type="submit">
Search
</button>
</div>
</div>
</formset>
</form>