我想申请一个允许我在指定时间内预订物品的申请。在
我需要一个函数来检查指定的项目是否已经在我想要使用它的期间被预订(所以预订应该失败)。你能帮助我吗?在
在模型.py在
from django.db import models
from datetime import *
from django.db.models import Q
import datetime
from django.core.exceptions import ValidationError
class Reservation(models.Model):
date_debut = models.DateTimeField('debut de la reservation')
date_fin = models.DateTimeField('fin de la reservation')
obj_res = models.ForeignKey('Materiel')
notice = models.CharField(max_length=200)
personne = models.ForeignKey('Personne')
def __int__(self):
return self.id
def save(self, *args, **kwargs):
new_start_date = datetime.datetime(2013, 11, 16, 10, 00)
new_end_date = datetime.datetime(2013, 11, 16, 11, 00)
material = Materiel.objects.get(nom="Bimaire 1")
clashing_reservations = Reservation.objects.filter(obj_res=material).filter(
Q(date_debut__lte=new_start_date, date_fin__gte=new_start_date) |
Q(date_debut__lt=new_end_date, date_fin__gte=new_end_date)
)
if clashing_reservations.exists():
raise ValidationError('Those dates clash with another reservation.')
return super(Reservation, self).save(*args, **kwargs)
class Materiel(models.Model):
nom = models.CharField(max_length=200)
description = models.CharField(max_length=200)
responsable = models.CharField(max_length=200)
modalites = models.CharField(max_length=200)
def __unicode__(self):
return self.nom
class Personne(models.Model):
nom = models.CharField(max_length=200)
prenom = models.CharField(max_length=200)
def __unicode__(self):
return self.nom
在视图.py在
^{pr2}$编辑 谢谢,到目前为止它似乎是有效的。 但是现在我要定义new_start_date和new_end_date是表单的实际值。在
我不知道您的日期格式,但不管怎样,您可以使用模块日期时间将日期和时间相互比较(减法、加法、高/低等)。在
所以我举了一个简单的例子来说明它的用法(我假设你的格式是月/日/年):
date_demance_db和date_fin_db是您从数据库中取出的日期,而date_first_form和date_fin_form是用户填写的日期。在
这是未经测试的代码,但我认为这个逻辑应该测试是否有其他保留与表单中提交的保留重叠。这可能应该放在表单的
clean
方法中,或者其他一些验证中。甚至在Reservation
模型的save
方法上:相关问题 更多 >
编程相关推荐