【问题标题】:Intersection of two SearchQuerySets in DjangoDjango 中两个 SearchQuerySet 的交集
【发布时间】:2015-01-21 07:44:22
【问题描述】:

所以我有一个类似的模型:

class Whatever(SlugMixin, models.Model):
    user = models.ForeignKey(auth_models.User, related_name='user+', verbose_name=_('User'), on_delete=models.PROTECT)
    name = models.CharField(verbose_name=_('Name'), max_length=200)

我正在尝试查找属于该用户且名称与搜索词匹配的所有对象。

我已经明白这样做了:

SearchQuerySet().filter(text=searched_term).filter(user=user)

行不通。它返回给我这两者的结合。但是,我想要这两个条件的交集,而不是联合。我知道这是因为用户和文本属于不同的模型。

【问题讨论】:

    标签: python django django-haystack searchqueryset


    【解决方案1】:

    为了确保我们在同一个页面上,联合和交叉的含义,让我们举一个简短的例子:

    A 组 = [1, 2, 3]

    B 组 = [2, 3, 4, 5]

    A 和 B 的交点是[2, 3]

    A 和 B 的联合是[1, 2, 3, 4, 5]

    如果您正在寻找交叉路口:

    desired_queryset = Whatever.objects.filter(user=user, name=searched_term)
    

    如果您正在寻找工会:

    from django.db.models import Q
    desired_queryset = Whatever.objects.filter(Q(user=user) | Q(name=searched_term))
    

    【讨论】:

    • 是的,我实际上使用了相同的操作,只是我使用了“text=searched_term”而不是“name=searched_term”。似乎还有另一个导致奇怪结果的错误。如果 searched_term 的长度为 1,则忽略此过滤器。必须深入挖掘。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多