在Django应用程序中查找列表中的对象工作不正常

2024-06-01 10:15:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我想检查用户选择的日期是否尚未预订。我写了下面的代码,输入一个日期后,已经在数据库预订,我被告知,该日期是免费的,这是不应该的。你知道吗

模型

属性模型

class Kip(models.Model):
    user=models.ForeignKey(User)
    name=models.CharField(max_length=250)
    address=models.CharField(max_length=200)

业主日历模型

class OwnerCalendar(models.Model):
    user=models.ForeignKey(User)
    kip=models.ForeignKey(Kip)
    booked_dates=models.CharField(max_length=1000)
    pub_date=models.DateTimeField()

预订物业模型

class Bookable(models.Model):
    user=models.ForeignKey(User)
    event_date=models.DateField()
    session=models.ForeignKey(Session)
    full_name=models.CharField(max_length=100)
    phone_no=models.CharField(max_length=40)
    kip=models.ForeignKey(Kip)

视图

def booking_of_space(request, kipid):
    if request.method=="POST":
        form=BookableForm(request.POST)
        if form.is_valid():
            data=form.cleaned_data
            newbooking=Bookable(
                user=request.user,
                pub_date=datetime.datetime.now(),
                event_date=data['event_date'],
                phone_no=data['phone_no'],
                kip=Kip.objects.get(pk=kipid),
                session=Session.objects.get(session_key=request.session.session_key))
            newbooking.save()
            renter=newbooking.event_date
          owners=OwnerCalendar.objects.filter(kip__id=kipid).values_list('booked_dates')
            if renter in owners:
                return HttpResponse('Booked already')
            else:
                return HttpResponse('Go ahead and book')
        else:
            return HttpResponse('Kindly input the right data')
    else:
        return render_to_response('bookablespace.html',{'BookableForm':BookableForm},context_instance=RequestContext(request))

我错过了什么?你知道吗


Tags: 模型eventdatadatereturnmodelsrequestsession
1条回答
网友
1楼 · 发布于 2024-06-01 10:15:37

您将日期对象newbooking.event_date与字符串列表booked_dates进行比较,这永远不会是真的。为什么不做一个查询来检查在某个特定时间是否已经为属性创建了Bookable条目呢?比如:

    if form.is_valid():
        data=form.cleaned_data
        requested_date = data['event_date']
        requested_kip = Finapart.objects.get(pk=kipid)
        existing_bookings = Bookable.objects.filter(
            kip = requested_kip,
            event_date = requested_date
        )
        if existing_bookings: 
            return HttpResponse('Booked already')
        newbooking=Bookable(
            user=request.user,
            pub_date=datetime.datetime.now(),
            event_date=requested_date,
            phone_no=data['phone_no'],
            kip=requested_kip,
            session=Session.objects.get(session_key=request.session.session_key))
        newbooking.save()
        return HttpResponse('Booking saved')
    ...

相关问题 更多 >