在Django Haystack的MultiValueField中过滤多个值

时间:2013-11-18 21:50:46

标签: django django-haystack

我有两个模型如下。权限结构允许Person查看具有与它们共同的Group的任何对象,因此如果Person在组1,2和3中,并且Object与组3,4,5共享,则Person可以通过第3组看到它。

class Person(models.Model):
    groups = models.ManyToManyField(Group)

class Object(models.Model):
    groups = models.ManyToManyField(Group)

SearchIndex是这样的:

class ObjectIndex(indexes.SearchIndex, indexes.Indexable):
    groups = indexes.MultiValueField(null=True)

    def prepare_groups(self, obj):
        return [group.pk for group in obj.groups.all()] or None

那么,创建SearchQuerySet的最佳方法是什么,这样我就可以在组中使用SearchQuerySet().models(Object).filter(groups=aperson.groups.all())来代替AND而不是AND?

1 个答案:

答案 0 :(得分:11)

看起来正确的方法是:

SearchQuerySet().models(Object).filter(groups__in=[g.id for g in aperson.groups.all()])