【问题标题】:django Cannot combine queries once a slice has been takendjango 获取切片后无法组合查询
【发布时间】:2012-09-11 06:21:52
【问题描述】:

有没有办法连接切片查询集? 它的简化示例(我意识到这个特定示例可以写在一个查询中):

>>> ...
>>> query_set_1 = Model.objects.filter(...)[:3]
>>> query_set_2 = Model.objects.filter(...)[5:]

>>> query_set_1 | query_set_2

不会工作,

>>> AssertionError: Cannot combine queries once a slice has been taken.

有什么建议吗? 谢谢!

【问题讨论】:

    标签: django concatenation slice django-queryset


    【解决方案1】:

    您可以使用union() 组合两个切片查询集。像这样:

    query_set_1 = Model.objects.filter(...)[:3]
    query_set_2 = Model.objects.filter(...)[5:]
    
    queryset = query_set_1.union(query_set_2)
    

    【讨论】:

    • 复合语句的子查询中不允许使用LIMIT/OFFSET
    • 对不起,我没明白你的意思。能详细点吗?
    • 我认为您应该尝试一下答案。如果您在此过程中遇到任何错误,请分享:) 谢谢
    【解决方案2】:
    merged_queryset = [x for x in queryset1] + [y for y in queryset2]
    

    【讨论】:

      【解决方案3】:

      没有。但是itertools.chain() 将允许您按顺序遍历两个查询集。

      qiter = itertools.chain(query_set_1, query_set_2)
      

      【讨论】:

      • 我们可以使用相同的执行和操作符,即 query_set_1 和 query_set_2 还是有什么不同?
      猜你喜欢
      • 2021-03-05
      • 2021-08-17
      • 1970-01-01
      • 2011-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-26
      相关资源
      最近更新 更多