什么是有效的方法来检测对象的日期范围是否被占用?

时间:2016-05-25 23:15:07

标签: python django django-models

我被困住了,希望你能帮助我。

我有租用自行车的应用程序,用户通过日历选择日期范围(从startUser到endUser)。每辆自行车都有几个副本(变体),如果某些副本在用户范围内可用,他就会接受那个。

我知道公式: 如果没有(endBike< startCar或startUser> endBike):他们重叠

并拥有类似的模型:

class Bike(models.Model):
    name = models.CharField(max_length = 200)

class Variation(models.Model):
    bike = models.ForeignKey(Bike)

class RentDate(models.Model):
    startBike= models.DateField(blank=True, null=True)
    endBike = models.DateField(blank=True, null=True)
    variation = models.ForeignKey('Variation',null=True, blank=True)

但不知道如何解析所有日期并检测用户日期是否可用于其中一个变体。

谢谢

2 个答案:

答案 0 :(得分:0)

如果您使用的是django> = 1.8,则可以使用DurationField作为您的模型。

使用DurationField,您无需设置start_time和end_time。通过设置DurationField unique = True,您可以检查此时间段是否被占用。

希望有所帮助。

答案 1 :(得分:0)

你可能需要这样的东西:

available_bikes = Variation.objects.filter(...
    ).exclude(
    Q(rentdate__startCar__range=(start_date, end_date)) |
    Q(rentdate__endCar__range=(start_date, end_date))
    )

这将检查租赁开始日期和结束日期是否未被其他用户租用。

之后,您所要做的就是确保通过以下方式获得一些自行车:

if not available_bikes:
    bikestoshow = None
else:
    bikestoshow = available_bikes[0].id #list of bike IDs