加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

mysql – Django查询返回两次沟通的工具

发布时间:2021-03-07 09:39:57 所属栏目:编程 来源:网络整理
导读:通用的例子.当我这样做一个查询 a = MyObject.objects.filter(...) a将包括过滤器匹配的全部内容.当我这样做时: a.filter(...) a只包括与两个过滤器匹配的工具,对吧?以是在第一个filter()之后,我也许有5个元素,然后在第二个filter()之后我也许剩下5此中的2

通用的例子.当我这样做一个查询

a = MyObject.objects.filter(...)

a将包括过滤器匹配的全部内容.当我这样做时:

a.filter(...)

a只包括与两个过滤器匹配的工具,对吧?以是在第一个filter()之后,我也许有5个元素,然后在第二个filter()之后我也许剩下5此中的2个?

我的一个查询获得了稀疏的功效.以下查询:

>>> Item.objects.filter(account__in=Account.objects.filter(customer=a),disabled=False)
[

这发生了一个功效.请记着,100396是主键,因此只有一个具有此idnetifier的Item.此刻,当我应用一个特另外过滤器时,该过滤器应仅表现已禁用的发票上的项目或没有发票:

>>> Item.objects.filter(account__in=Account.objects.filter(customer=a),disabled=False).filter(Q(iteminv__invoice__disabled=False) | Q(iteminv__isnull=True))
[

我用统一个工具获得这个功效两次……这怎么也许?我误解了什么吗?

将它所有放在一个filter()中会发生沟通的稀疏输出:

>>> Item.objects.filter(Q(account__in=Account.objects.filter(customer=a)),Q(disabled=False),Q(iteminv__invoice__disabled=False) | Q(iteminv__isnull=True))
[

Django版本1.6.2 最佳谜底 因为在多对多相关长举办过滤时所涉及的毗连或反向外键相关实例在功效齐集也许呈现两次(在这种环境下,Django将首要应用INNER JOIN,这也许会发生一再).因此,您应该在查询集上行使distinct(). (sql查询中的联接使项目呈此刻表中,暗示它与Account的每个相关.)

另请参阅the examples in the django documentation以相识多对多相关.

编辑:假如您想行使SQL /和/或搜查天生的查询,请执行相同打印Item.objects.filter(your_query).query的操纵.

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读