如何对ManyToManyField使用OuterRef?

时间:2019-09-04 10:36:57

标签: django django-queryset

我正在尝试查询房间列表。房间里可以有很多参与者。我想排除有被用户阻止或被阻止的参与者的房间。如果参与者是简单的ForeignKey(User)字段,则下面的代码有效。但是,事情是参与者是ManyToManyField字段。它写得像

participants = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name='participants')

下面的代码不起作用。

get_blocked = Exists(users_models.Relationship.objects.filter(
            from_user=OuterRef('participants'), to_user=info.context.user, status='BLOCK'))
blocking = Exists(users_models.Relationship.objects.filter(
                from_user=info.context.user, to_user=OuterRef('participants'), status='BLOCK'))
models.Room.objects.annotate(get_blocked=get_blocked, blocking=blocking
                        ).filter(participants=info.context.user, get_blocked=False, blocking=False
                        ).distinct()

同样,当参与者是简单的ForeignKey(User)时,相同的逻辑也起作用。我想知道是否有任何方法可以解决此问题。

0 个答案:

没有答案