基于逆关系的Django-QuerySet滤波器

基于逆关系的Django-QuerySet滤波器,django,Django,我真的很挣扎,希望能得到一些帮助。我有以下型号 class Booking(models.Model): property = models.ForeignKey(Property, related_name='booking', on_delete=models.SET_NULL, null=True) check_in_date = models.DateField() check_out_date = models.DateField() def __st

我真的很挣扎,希望能得到一些帮助。我有以下型号

class Booking(models.Model):
    property = models.ForeignKey(Property, related_name='booking', on_delete=models.SET_NULL, null=True)
    check_in_date = models.DateField()
    check_out_date = models.DateField()

    def __str__(self):
      return f"{self.property}"

class Property(models.Model):
    name = models.CharField(max_length=100, blank = False)

    def __str__(self):
        return f"{self.name}"
但是,当我运行以下程序(如下)检索日期等于2021-05-14的酒店预订时,将返回每个酒店的所有预订,而不仅仅是签入日期为2021-05-14的预订,即使没有签入日期为2021-05-14,也会返回每个酒店的所有预订

Property.objects.filter(booking__check_in_date='2021-05-14')  

也许有些事情真的很简单,但我是Django的新手,整个上午都在忙这个,希望能得到一些帮助。谢谢

您实际上需要这样的东西:

bookings = Booking.objects.filter(check_in_date='2021-05-14')
properties = [booking.property for booking in bookings]

因为属性在预订对象上可用,并且您正在对预订进行初始筛选。

您实际上需要这样的内容:

bookings = Booking.objects.filter(check_in_date='2021-05-14')
properties = [booking.property for booking in bookings]

因为属性在Booking对象上可用,并且您正在初始筛选bookings。

要筛选Django中的日期字段,必须将日期字符串转换为datetime对象:

from datetime import datetime


check_in_date = datetime.strptime('2021-05-14',  '%Y-%m-%d')
properties = Property.objects.filter(booking__check_in_date=check_in_date)  

要筛选Django中的日期字段,必须将日期字符串转换为datetime对象:

from datetime import datetime


check_in_date = datetime.strptime('2021-05-14',  '%Y-%m-%d')
properties = Property.objects.filter(booking__check_in_date=check_in_date)  

您在
查询集中过滤
属性
,但是如果您访问
某些属性,则booking.all()
将不会被过滤。您在
查询集中过滤
属性
,但是如果您访问
某些属性,booking.all()
将不会被过滤。谢谢您的回答。这非常有帮助。谢谢你的回答。这起了很大的作用。