过滤日期中Django的可用性

时间:2011-12-23 00:07:02

标签: django django-queryset

想象一下宿舍在任何一个晚上都能跟踪房间是否可用。此外,如果超过1位客人的一方正在寻找一个房间,他们只需要一间至少有这么多床位的房间。

考虑到日期范围,我想找到可用的房间,并且至少有床位数,因为有客人(以及其他过滤)。

如果没有与.filters有效地链接AND,我该如何解决这个问题? (现在它的工作原理 - 让我的数据库非常难过。)

如果需要,我当然愿意采用不同的方案来存储可用性数据。

谢谢! (下面的假设类可以更好地理解问题。)

class Room(models.Model):
    name = models.CharField(max_length=100)

class RoomAvailability(models.Model):
    room = models.ForeignKey(Rooms)
    date = models.DateField()
    beds = models.IntegerField(default=1)

1 个答案:

答案 0 :(得分:1)

available_rooms = (Room.objects
    .filter(roomavailability__date__range=(start_date, end_date))
    .values('roomavailability__date', 'pk')
    .annotate(sum=Sum('roomavailability__beds'))
    .filter(sum__gte=min_beds))

更新:忘了我们每天都需要房间。此查询将返回可用日期集和其房间PK。