我有一个餐厅模型,以及与餐厅有外键关系的日程表模型。我目前正在尝试查询现在正在营业的餐馆。到目前为止,我一直在做
qs = Restaurant.objects.all()
qss = []
for q in qs:
schedule = q.schedule_set.filter(start_hour__lte=currHour, end_hour__gte=currHour)
if schedule:
qss.append(q)
其中currHour是datetime.now()给出的当前小时。
但是我想知道我是否可以用Q重写这个查询,所以如果我必须将这个查询与其他查询结合起来,我可以向q = Q()添加更多查询,例如。
答案 0 :(得分:2)
当您可以实际为整个事物编写查询时,您不应该对查询集项执行此迭代。现在设置它的方式是,您为每次迭代发出数据库查询。如果我理解你的场景是正确的,你可以像这样重写它来发出一个查询,使用ForeignKey遍历:
qss = Restaurant.objects.filter(schedule__start_hour__lte=currHour, schedule__end_hour__gte=currHour)
然后您也可以向此添加查询。 filter()
是可链接的,因此您也可以执行以下操作:
q = Model.objects.filter(**filter_kwargs)
q = q.filter(**additional_filter_kwargs)