Django modelform NameError: имя 'check_in' не определено - PullRequest
0 голосов
/ 17 января 2020

Привет всем, я новичок в django, строю систему бронирования ложи с django3.0, и я не могу заставить свою модель сформировать правильный набор запросов для получения данных в моей модели резервирований, я продолжаю получать NameError сообщение об ошибке каждый раз, когда я пытаюсь ввести новую дату через мой взгляд, и сейчас я не совсем уверен, как правильно решить эту ошибку

вот мои models.py:

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User


now = timezone.now
end = timezone.now() + timezone.timedelta(days=2)
room_choices = [
        ('single_room', 'Single Room'),
        ('double_room', 'Double Room'),
        ('executive_room', 'Executive Room'),
    ]



class Reservation(models.Model):
    room_type = models.CharField(max_length=30, choices=room_choices, default=room_choices[1])
    check_in = models.DateField(default=timezone.now)
    check_out = models.DateField(default=end)

    class Meta:
        verbose_name = 'Reservation'
        verbose_name_plural = 'Reservations'

Я хотел бы добавить утверждения проверки позже в views.py для цены и количества комнат в зависимости от типа комнаты, выбранного пользователем, поэтому игнорируйте поле на данный момент

вот мой forms.py :

from django import forms
from .models import Reservation

class AvailabilityForm(forms.ModelForm):
    class Meta:
        model = Reservation
        fields = [
            "room_type",
            "check_in",
            "check_out",

        ]
        widgets = {
            'check_in': forms.DateInput(format='%m/%d/%Y'),
            'check_out': forms.DateInput(format='%m/%d/%Y'),
        }

Если кто-то знает, как заставить виджеты работать должным образом вне администратора, отображая календарь cclick, а не просто поле char с полем даты внутри, пожалуйста, также помогите мне решить эту проблему а также

вот мой views.py:

from django.shortcuts import get_object_or_404, render
from datetime import timedelta, date
from django.contrib.auth.models import User
from django.contrib import messages
from . import forms
from .models import Reservation 


def availability(request):
    form = forms.AvailabilityForm()
    reservation = Reservation
    if request.method == 'POST':
        form = forms.AvailabilityForm(request.POST or None)
        if form.is_valid:
            reserve = form.save(commit=False)
            reserve.reservation = reservation

            # check whether the dates are valid
            # case 1: a room is booked before the check_in date, and checks out after the requested check_in date
            case_1 = Reservation.objects.filter(check_in__lte=reserve.check_in).filter(check_out__gte=check_in)

            # case 2: oom is booked before the requested check_out date and check_out date is after requested check_out date
            case_2 = Reservation.objects.filter(check_in__lte=check_out, check_out__gte=check_out).exists()

            #case3: room is booked in a date which lies between the two requested check-in/check-out dates
            case_3 = Reservation.objects.filter(check_in__gte=check_in, check_out__lte=check_out).exists()

            # if either of these is true, abort and render the error
            if case_1 or case_2 or case_3:
                return render(request, "availability.html", {"errors": "This room is not available on your selected dates", "form": form})  
            # else dates are valid
            reserve.save()
            messages.add_message(request, messages.SUCCESS, 'Room is available for your stay here')
            return redirect("/complete_booking")
    return render(request, "availability.html", {"form": form})

я пробовал разные методы, чтобы попытаться получить мое представление для проверки check_in и d Объекты check_out, как вы можете видеть, case1 и case2 используют разные методы фильтрации, но ни один из них, похоже, не работает, будет полезна любая помощь относительно того, где я ошибаюсь и как это исправить

1 Ответ

0 голосов
/ 18 января 2020

Из комментариев ошибка:

File "C:\Users\Karabo\Documents\technocrats2\core\views.py", line 160, in availability 
case_1 = Reservation.objects.filter(check_in__lte=check_in).filter(check_out__gte=check_out).exists()
NameError: name 'check_in' is not defined

После проверки трассировки становится ясно, что вы не определили ни одну переменную check_in. Вам необходимо определить переменную перед ее использованием.

check_in = "18-01-2020" # value you want to use in queryset. 
case_1 = Reservation.objects.filter(check_in__lte=reserve.check_in).filter(check_out__gte=check_in)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...