【问题标题】:Django: how to query all values in an array?Django:如何查询数组中的所有值?
【发布时间】:2016-10-20 23:53:41
【问题描述】:

我有一个包含多个值的复选框。例如,hobbies。当用户选择一些hobbies时,他想看到拥有所有这些爱好的人。

为了清楚起见,我没有详细说明,所以这是我如何读取所有检查的值并将它们放入我的“大”查询中,您可能会猜到:q

hobbies2 = [int(l) for l in g.getlist('hobbies2')]
if len(hobbies2):
    q = q & Q(personne__hobbies2__in=hobbies2)

问题在于它返回所有有共同爱好的人(即,它类似于“or”,而不是“and”)。

如何使用and 获取所有这些多对多的值?

【问题讨论】:

    标签: django django-queryset


    【解决方案1】:

    __in 运算符用于按集合进行过滤。它不适用于在多对多关系中一次检查多个值。

    它在 SQL 中直译为以下内容:

    SELECT ... WHERE hobbies IN (1, 3, 4);
    

    因此,您需要使用 AND 条件构建查询。您可以使用连续的过滤器来做到这一点:

    queryset = Personne.objects.all()
    
    # build up the queryset with multiple filters
    for hobby in hobbies2:
        queryset = queryset.filter(hobbies2=hobby)
    

    【讨论】:

    • 你确定personne__hobbies2=hobby 不会在有多个爱好时淘汰人吗?例如:kayak = 1,ski = 2。这将首先过滤personne__hobbies2=1,然后过滤personne__hobbies2=1。你确定它可以工作吗?
    • 连续 Q 对象不起作用。我在这里尝试了 #1 解决方案:stackoverflow.com/questions/8618068/… 它也不起作用。
    • 感谢您的链接,我已更新我的答案以删除 Q 查询。但是,连续的过滤器应该可以工作,因为它们在链接中进行了演示。
    猜你喜欢
    • 2016-01-21
    • 1970-01-01
    • 2017-11-10
    • 2016-07-28
    • 2022-12-11
    • 1970-01-01
    • 2018-10-07
    • 2021-10-25
    • 1970-01-01
    相关资源
    最近更新 更多