首页 » 编程设计

python之Django asymettrical self 通过关系查询

2025年05月04日19softidea

我有以下 - 简化 - 模型:

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) 

获取所有Following对象与User用户和真正的友谊

但是我怎样才能得到 user 和 status=1 的所有 User 对象呢? 我似乎找不到办法

谢谢!

请您参考如下方法:

尝试

user.following.filter(to_user__status=1) 

user.following仍在查询 User ,因此您需要跨越关系 w/__至 Follow在这里。

这里的两个字段,from_user和 to_user , 都是 ForeignKey指向 User模型。因此对于 User()实例 u :

另外,您可以过滤 ForeignKey直接,记住 from_user和 to_user都是引用 Follow :

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 


阅读延展