多对多 - return 只有来自对称关系的对象
Many-to-many - return only objects from symmetrical relationship
我在 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()
到 return 只有与登录用户具有对称关系的用户,因为当我这样做时:
Relationship.objects.filter(from_person__in=request.user.friends.all(), to_person=request.user)
它 returns Relationship
当然是对象,但我想像上面的命令那样拥有 User
对象。
问题是如何实现?我想我必须制作自定义 m2m 管理器并以某种方式修改 get_queryset()
方法。
我终于用这个命令解决了它:
User.objects.filter(from_person__from_person__in=request.user.friends.all(), from_person__to_person=request.user)
我在 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()
到 return 只有与登录用户具有对称关系的用户,因为当我这样做时:
Relationship.objects.filter(from_person__in=request.user.friends.all(), to_person=request.user)
它 returns Relationship
当然是对象,但我想像上面的命令那样拥有 User
对象。
问题是如何实现?我想我必须制作自定义 m2m 管理器并以某种方式修改 get_queryset()
方法。
我终于用这个命令解决了它:
User.objects.filter(from_person__from_person__in=request.user.friends.all(), from_person__to_person=request.user)