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

2024-05-17 12:40:02 发布

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

我卡住了,希望你能帮我。你知道吗

我有一个租赁自行车的应用程序,用户可以通过日历选择一个日期范围(从开始用户到最终用户)。每辆自行车都有多个副本(变化),如果用户范围内有一些副本,他会接受。你知道吗

我知道公式: 如果不是(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)

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

谢谢


Tags: 用户true应用程序modelmodels副本自行车null
2条回答

你可能需要这样的东西:

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

如果您使用的是django>;=1.8,那么您的模型可以使用DurationField。你知道吗

使用DurationField,您不需要设置开始时间和结束时间。通过设置DurationField unique=True,可以检查这个时间段是否被占用。你知道吗

希望对你有帮助。你知道吗

相关问题 更多 >