【问题标题】:Querying with foreign key values in Django with Q在 Django 中使用 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() 添加更多查询。

【问题讨论】:

    标签: sql django foreign-keys django-queryset django-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)
    

    【讨论】:

      猜你喜欢
      • 2013-02-27
      • 2017-03-20
      • 2015-11-12
      • 2015-02-28
      • 2020-12-08
      • 2011-02-01
      • 2018-09-01
      • 2014-08-12
      • 1970-01-01
      相关资源
      最近更新 更多