在 Django 中使用 Q 查询外键值
Posted
技术标签:
【中文标题】在 Django 中使用 Q 查询外键值【英文标题】:Querying with foreign key values in Django with Q 【发布时间】:2016-03-31 09:34:09 【问题描述】:我有一个 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() 添加更多查询。
【问题讨论】:
【参考方案1】:当您实际上可以为整个事物编写查询时,您不应该对查询集项目进行此迭代。您现在设置它的方式是为每次迭代发出一个数据库查询。如果我正确理解您的情况,您可以使用 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)
【讨论】:
以上是关于在 Django 中使用 Q 查询外键值的主要内容,如果未能解决你的问题,请参考以下文章