python 如何根据数据库表中的值检查Django表单提交

ukdjmx9f  于 2023-02-15  发布在  Python
关注(0)|答案(3)|浏览(125)

我正在尝试在www.example.com中创建一个函数views.py,该函数可以根据已经提交到数据库中的值检查用户提交的日期:

def make_booking(request):

    if request.method == 'POST':
        form = BookingForm(request.POST)
        if form.is_valid():
            new_date = form.cleaned_data.get("date_of_booking")
            existing_booking = Booking.objects.get('date_of_booking').items()
            for booking in existing_booking:
                if booking == new_date:
                    messages.success(request, "THIS DATE IS ALREADY TAKEN")
                else:
                    form.save()
                    print('form saved')
            if request.user.is_authenticated:
                return redirect(get_bookings)
            if not request.user.is_authenticated:
                return redirect(get_bookings_guest)

如果日期已经存在于数据库中,那么我希望它显示一条消息,说日期已经存在。我已经写了上面的似乎对我来说是正确的,但我得到这个错误:“异常值:
要解包的值太多(应为2)"。
有人能帮帮我吗?

13z8s7eq

13z8s7eq1#

试试这个:
如果form.is有效():

new_date = form.cleaned_data.get("date_of_booking")

if Booking.objects.filter(date_of_booking=new_date).exists():
    messages.success(request, "THIS DATE IS ALREADY TAKEN")
else:
    form.save()
    print('form saved')
qmb5sa22

qmb5sa222#

如何过滤数据库中的Booking对象以获得所有包含new_date的条目?根据返回的条目数进行if比较;如果为零,则new_date是新日期。
假设new_datedatetime对象,您可以执行以下操作:

if form.is_valid():
    new_date = form.cleaned_data.get("date_of_booking")
    existing_bookings = Booking.objects.filter(date_of_booking=new_date)
    if existing_bookings.count() == 0:
        form.save()
        print('form saved')
    else:
        messages.success(request, "THIS DATE IS ALREADY TAKEN")
4nkexdtk

4nkexdtk3#

Sample with time

new_date = form.cleaned_data.get("date_of_booking")
new_time = form.cleaned_data.get("time_of_booking")

if Booking.objects.filter(date_of_booking=new_date).filter(
        time_of_booking=new_time).exists():
    messages.success(request, "THIS DATE AND TIME IS ALREADY TAKEN")

else:
    form.save()
    print('form saved')

相关问题