我有以下-简化的模型:
class User(models.Model):
following = models.ManyToManyField("self", through='Following', symmetrical=False)
class Following(models.Model):
from_user = models.ForeignKey(User, related_name='from_user')
to_user = models.ForeignKey(User, related_name='to_user')
status = models.IntegerField()
状态为0表示待处理,1表示关注
让用户成为用户。我想获得所有关注的用户
我可以
user.following.all()
获得用户关注的所有用户(待处理的关系或真正关注)
要么
Following.objects.filter(from_user=user, status=1)
与用户用户和真正的友谊获得所有以下对象
但是,如何获取user和status = 1的所有User对象?
我似乎找不到办法
谢谢 !
最佳答案
尝试
user.following.filter(to_user__status=1)
user.following
仍在User
上查询,因此您需要在此处将w / __
的关系扩展到Follow
。此处的两个字段
from_user
和to_user
都是ForeignKey
指向User
模型。因此,对于User()
实例u
:u.following
通过中间表User()
搜索与w / u
有关系的Follow
。这里的关键是u.following
在ForeignKey
中选择指向Follow
的第一个User
作为对u
本身的引用。因此,对于您的Follow
版本,在u.following.filter(to_user__status=1)
项上的Follow
过滤器具有from_user
等于u
,并且to_user
w / status
等于1
。查找是典型的following relationship backwardsu.from_user
在中间表中搜索等于from_user
的那些u
在中间表中搜索等于u.to_user
的那些另外,您可以直接过滤
to_user
,要记住u
和ForeignKey
都引用from_user
:User.objects.filter(to_user__from_user=user, to_user__status=1) # user as from_user
User.objects.filter(from_user__to_user=user, from_user__status=1) # user as to_user
User.objects.filter(following=user) # those who are followed by `to_user` user
关于python - Django非对称自我通过关系查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13293068/