使用 Q 在 Django 中查询外键值
Querying with foreign key values in Django with Q
我有一个 Restaurant 模型和一个与 Restaurant 有外键关系的 Schedule 模型。我目前正在尝试查询现在营业的餐馆。到目前为止我一直在做
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() 添加更多查询,例如。
当您实际上可以为整个事物编写查询时,您不应该对查询集项目执行此迭代。您现在设置它的方式是为每次迭代发出一个数据库查询。如果我理解你的场景是正确的,你可以像这样重写它以仅发出一个查询,使用 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)
我有一个 Restaurant 模型和一个与 Restaurant 有外键关系的 Schedule 模型。我目前正在尝试查询现在营业的餐馆。到目前为止我一直在做
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() 添加更多查询,例如。
当您实际上可以为整个事物编写查询时,您不应该对查询集项目执行此迭代。您现在设置它的方式是为每次迭代发出一个数据库查询。如果我理解你的场景是正确的,你可以像这样重写它以仅发出一个查询,使用 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)