基于逆关系的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()
将不会被过滤。谢谢您的回答。这非常有帮助。谢谢你的回答。这起了很大的作用。