Python Django足球场预订系统的实现

Python Django足球场预订系统的实现,python,django,django-models,view,Python,Django,Django Models,View,我有两个应用程序;草皮和预订。草皮应用程序models.py中有一个草皮模型,其中包含有关地面的基本信息。预订应用程序包含一个模型预订,该模型具有以下信息。关于预订场地 在排除已经预订的场地后,我一直在写视图部分,以获取可用场地 HTML格式: <form> <div class="col-md-3 mb-3"> <div class="input-group date" id="datepicker1">

我有两个应用程序;草皮和预订。草皮应用程序models.py中有一个草皮模型,其中包含有关地面的基本信息。预订应用程序包含一个模型预订,该模型具有以下信息。关于预订场地

在排除已经预订的场地后,我一直在写视图部分,以获取可用场地

HTML格式:

<form>
    <div class="col-md-3 mb-3">
                    <div class="input-group date" id="datepicker1">
                            <label class="sr-only">Date From:</label>
                            <input type="text" class="form-control rounded" required name="datein" placeholder="Date From"/>
                            <span class="input-group-addon">
                                <i class="#"></i>
                            </span>
                    </div>
                </div>
                <div class="col-md-3 mb-3">
                    <div class="input-group date" id="datepicker2">
                            <label class="sr-only">Date To:</label>
                            <input type="text" class="form-control rounded" required name="dateout" placeholder="Date To"/>
                            <span class="input-group-addon">
                                <i class="#"></i>
                            </span>
                    </div>
                </div>

              </div>
              <!-- Form Row 2 -->
              <div class="form-row">
                <div class="col-md-6 mb-3">
                        <label class="sr-only">TimeIN</label>
                        <span style="font-family: Titillium Web, sans-serif;">Time in:</span>
                        <input type="time" required name="timein" class="form-control">
                </div>
                <div class="col-md-6 mb-3">
                  <label class="sr-only">TimeOUT</label>
                    <span style="font-family: Titillium Web, sans-serif;">Time out:</span>
                  <input type="time" required name="timeout" class="form-control">
                </div>
              </div>
              <button class="btn btn-secondary btn-block mt-4" type="submit"> Check Availability</button>
            </form>
预订模式:

from django.db import models
from turfs.models import Turf
# Create your models here.

class Booking(models.Model):
    datein = models.DateField()
    dateout = models.DateField()
    time_in = models.CharField(max_length=50)
    time_out = models.CharField(max_length=50)
    name = models.CharField(max_length=100)
    address = models.TextField()
    phone = models.CharField(max_length=20)
    email = models.CharField(max_length=50)
    turf_id = models.ForeignKey(Turf, on_delete=models.CASCADE)

    def __str__(self):
        return self.name

您应该将
预订
模式更改为使用日期时间字段,而不是日期和两个字符串

class Booking(models.Model):
    start = models.DateTimeField()
    end = models.DateTimeField()
那么您的视图将如下所示:

requested_start # Some datetime
requested_end # Some datetime
is_available = not Booking.objects.filter(
    Q(start__range=[requested_start, requested_end])
    | Q(end__range=[requested_start, requested_end])
).exists()

您需要在请求预订的窗口中检查任何开始或结束着陆,因此Q对象被or。

您的问题到底是什么?旁注,我建议不要用
\u id
命名您的外籍钥匙,因为最后在
预订下。turf\u id
您将拥有turf对象,在
booking.turp\u id\u id
下,你会有身份证。我已经把问题缩短了。@mfrackowiak谢谢这个问题似乎很有效。谢谢
requested_start # Some datetime
requested_end # Some datetime
is_available = not Booking.objects.filter(
    Q(start__range=[requested_start, requested_end])
    | Q(end__range=[requested_start, requested_end])
).exists()