Django запрос простой формы 'GET', ошибка проверки поля даты - PullRequest
0 голосов
/ 04 января 2019

Итак, у меня есть простой просмотр списка и переопределение набора запросов, чтобы включить поля формы, чтобы пользователь мог искать конкретные доступные элементы.

Для фильтрации результатов списка я использую; 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>
...