Skip to main content
 首页 » 编程设计

python之Django 按预订日期过滤外键

2025年05月04日27mengfanrong

我有以下模型:

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。