我有两个模型如下。权限结构允许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?
答案 0 :(得分:11)
看起来正确的方法是:
SearchQuerySet().models(Object).filter(groups__in=[g.id for g in aperson.groups.all()])