Python Django通过关系查询的非对称自我

Python Django通过关系查询的非对称自我,python,django,django-orm,Python,Django,Django Orm,我有以下简化模型: 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.ForeignK

我有以下简化模型:

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()
获取用户正在跟踪的所有用户(挂起的关系或真正的跟踪)

要获得以下所有具有用户和真正友谊的对象

但是如何获取User和status=1的所有用户对象呢? 我似乎找不到办法

谢谢大家!

试试看

user.following.filter(to_user__status=1)
user.following
仍在查询
user
,因此您需要在此处将关系w/
\uuuu
扩展到
following

这里的两个字段,
from_user
to_user
,都是指向
用户
模型的
外键。因此,对于
用户()
实例
u

  • u.following
    通过中间表搜索与w/
    u
    有关系的
    User()
    s
    。这里的关键是
    u.following
    following
    中选择指向
    用户的第一个
    ForeignKey
    ,作为对
    u
    本身的引用。因此,对于您版本的
    Follow
    u.following.filter(to_user\u status=1)
    following
    项目上进行过滤,该项目的
    from_user
    等于
    u
    to_user
    状态等于
    1
    。查找是典型的
  • u.from\u user
    在中间表中搜索那些
    from\u user
    等于
    u
  • u.to_user
    在中间表中搜索那些
    to_user
    等于
    u
此外,您还可以直接在
外键上进行筛选,记住
从用户
到用户
都是参考
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
看来

user.following.filter(to_user__status=1)
这就是诀窍。有人能给我解释一下为什么,以及它是如何工作的吗?
user。下面是一个正在查询用户的ManyRelatedManager。
user.following.filter(from\u user\u status=1)
会做什么?猜不出它会返回什么。。。
再次感谢

from_user ForeignKey是到UserProfile还是到user?实际上这是我的模型的一个非常简化的版本,我忘了将UserProfile更改为user,谢谢,编辑您是否可能将AUTH_PROFILE_模块添加到用户模型?我正在使用该模块,但我只是复制和粘贴,我首先尝试使用这个简化版本,但出现以下错误:
FieldError:无法将关键字“status”解析为字段。选项如下:id
@noe请发布整个错误消息,通常它会列出可用的选项。看起来您的用户经理在那里。很抱歉,我复制了错误的行,这是正确的:
FieldError:无法将关键字“status”解析到字段中。选择如下:following,from_user,id,to_user,user
当我使用user.following.filter(status=1)…这似乎起作用了,但是你能解释一下
到_user\u status
部分吗?我不明白这是怎么回事<代码>用户。下面是一个ManyRelatedManager,正如您所说,它正在查询用户。所以
user.following
就是找到用户正在跟踪的用户对象,那么
to\u user
是如何派上用场的呢?
user.following.filter(from\u user\u status=1)
会做什么?在我看来,这个查询的结果不太符合逻辑。再次感谢,一旦我理解,我将验证:)
user.following.filter(to_user__status=1)