多对多 - 仅返回对称关系中的对象

时间:2016-06-01 07:17:45

标签: django django-models orm many-to-many django-orm

我在models.py中有以下代码:

class Relationship(models.Model):
    from_person = models.ForeignKey(User, on_delete=models.CASCADE, related_name="from_person")
    to_person = models.ForeignKey(User, on_delete=models.CASCADE, related_name="to_person")

此字段在User模型中定义:
friends = models.ManyToManyField('self', blank=True, symmetrical=False, through='Relationship')

我想要的是当我稍后在视图request.user.friends.all()中执行以仅返回与登录用户具有对称关系的用户时,因为当我这样做时:
Relationship.objects.filter(from_person__in=request.user.friends.all(), to_person=request.user)
它当然返回Relationship个对象,但我希望在它上面的命令中有User个。

问题是如何实现这一目标?我想我必须自定义m2m管理器并以某种方式修改get_queryset()方法。

1 个答案:

答案 0 :(得分:0)

我终于用这个命令解决了它:
User.objects.filter(from_person__from_person__in=request.user.friends.all(), from_person__to_person=request.user)