我正在尝试查询房间列表。房间里可以有很多参与者。我想排除有被用户阻止或被阻止的参与者的房间。如果参与者是简单的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)时,相同的逻辑也起作用。我想知道是否有任何方法可以解决此问题。