我有以下 - 简化 - 模型:
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对象? 我似乎无法找到方法
谢谢!
答案 0 :(得分:1)
尝试
user.following.filter(to_user__status=1)
user.following
仍然在User
上查询,因此您需要在此处与__
到Follow
的关系。
此处的两个字段from_user
和to_user
都ForeignKey
指向User
模型。因此对于User()
实例u
:
u.following
通过中间表User()
搜索与u
有关系的Follow
。这里的关键是u.following
选择ForeignKey
中指向Follow
的第一个User
,作为对u
本身的引用。因此,对于Follow
的{{1}}版本,u.following.filter(to_user__status=1)
过滤了Follow
项from_user
等于u
和to_user
w / {{1}等于status
。查找是典型的following relationship backwards 1
在中间表中搜索u.from_user
等于from_user
的人u
在中间表中搜索u.to_user
等于to_user
的人此外,您可以直接过滤u
,并记住ForeignKey
和from_user
都是to_user
:
Follow
答案 1 :(得分:0)
似乎
user.following.filter(to_user__status=1)
诀窍。有人可以向我解释为什么,以及它是如何工作的?
user.following
是一个在User上查询的ManyRelatedManager。 user.following.filter(from_user__status=1)
会做什么?无法猜测它返回的是什么......
再次感谢!