我有以下-简化的模型:

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_userto_user都是ForeignKey指向User模型。因此,对于User()实例u


u.following通过中间表User()搜索与w / u有关系的Follow。这里的关键是u.followingForeignKey中选择指向Follow的第一个User作为对u本身的引用。因此,对于您的Follow版本,在u.following.filter(to_user__status=1)项上的Follow过滤器具有from_user等于u,并且to_user w / status等于1。查找是典型的following relationship backwards
u.from_user在中间表中搜索等于from_user的那些
u在中间表中搜索等于u.to_user的那些


另外,您可以直接过滤to_user,要记住uForeignKey都引用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/

10-11 07:33