Python Django足球场预订系统的实现
我有两个应用程序;草皮和预订。草皮应用程序models.py中有一个草皮模型,其中包含有关地面的基本信息。预订应用程序包含一个模型预订,该模型具有以下信息。关于预订场地 在排除已经预订的场地后,我一直在写视图部分,以获取可用场地 HTML格式: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">
<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()