预订系统中的免费日期

时间:2013-05-26 06:41:44

标签: django

我正在预订系统,我找不到选择免费日期的好方法。这是我的模特:

class rental_group(models.Model):
    group_title = models.CharField(max_length = 30)
    description = models.TextField()

class rental_units(models.Model):
    group = models.ForeignKey(rental_group)
    number = models.CharField(max_length = 6)

class Reservations(models.Model):
    #name = models.ForeignKey(customer)
    rental_unit = models.ForeignKey(rental_units)
    start_date = models.DateField()
    end_date = models.DateField()

我尝试使用此查询选择可用房间:

rental_units.objects.filter(group__rental_group = 'Bungalow').exclude(Q(Reservations__start_date__lt = arrival)&Q(Reservations__end_date__gt = arrival)|Q(Reservations__start_date__lt = departure)&Q(Reservations__end_date__gt = departure))

只有一次预订时,此功能非常完美。如果对同一号码有更多预订,则出现问题。例如,当我在数字120上有两个保留时,当一切都可用时,该查询返回120两次。如果新预订在一个旧的保留日期之间(应该为零“不可用”),则120返回一次

这可以通过查询实现吗?或者我应该对预订做些什么,并从列表中删除已保留的房屋(当有很多预订时可能需要很长时间)

2 个答案:

答案 0 :(得分:1)

你想要预订,而不是rental_units,所以过滤它们:

Reservations.objects\
.filter(rental_unit__group__group_title='Bungalow')\
.exclude(
    Q(start_date__lt=arrival) & \
    Q(end_date__gt=arrival) | \
    Q(start_date__lt=departure) & \
    Q(end_date__gt=departure)
)

答案 1 :(得分:0)

好吧,似乎不可能做我想要的事情。所以我选择了一种不同的方法:

列出所有rental_units:all_units

从下面的查询中列出rental_units,并从all_units中删除这些列表项:

rental_units.objects.filter(group__rental_group = 'Bungalow').filter(Q(Reservations__start_date__gt = arrival)&Q(Reservations__start_date__lt = departure)|Q(Reservations__end_date__gt = arrival)&Q(Reservations__end_date__lt = departure)) 

我增强了查询集,因此它与主题start不同。

查询集返回所有在到达和离开日期之间有预订的平房。