我有以下模型:
class House(models.Model):
Name = models.CharField(max_length=200, unique=True)
Reference = models.CharField(max_length=50, unique=True)
class Booking(models.Model):
House = models.ForeignKey(House, related_name='booking')
InitialDate = models.DateField()
FinalDate= models.DateField()
现在,我想执行查询以过滤日期范围内的所有可用房屋(例如:2013-07-21 至 2013-07-30),因此它应该排除预订开始和结束的所有房屋在这两个日期之间。 我可以使用原始 SQL 执行此查询,但不能使用 Django 语法。
有人可以帮忙吗?
非常感谢!
请您参考如下方法:
当使用 Django ORM 时,其中一种做法是,您应该始终从您想要结束的关系开始,在您的例子中是 House。
我认为这将是您当时的处理方式:
unbooked_houses = House.objects.exclude(
booking__InitialDate__gte=start_date, booking_FinalDate__lte=end_date)
这样你最终会得到一个 QuerySet 并且不需要为列表理解和诸如此类的事情而烦恼。
此外,Python PEP-8文档规定您应该遵循以下变量和属性的命名约定:
InitialDate 最好是 initial_date。
