如何在Django中按用户资料属性过滤查询?

9 投票
1 回答
5054 浏览
提问于 2025-04-15 20:16

我有两个模型,分别是 DesignProfile。在 settings.py 文件中,Profile 被设置为与用户模型(User model)一起使用的个人资料。所以我可以通过 user.get_profile() 来访问它。

而每个 Design 实例都有一个 author 属性,这个属性是指向用户(User)的外键(ForeignKey)。

因此,在任何视图中,我可以通过以下方式获取屏幕名称(Profile 的一个属性):

user.get_profile().screenname

但是,想要通过过滤器来搜索这个属性的语法是什么呢?我现在的写法是:

designs = Design.objects.filter(author__userprofile__screenname__icontains=w)

但这个写法不行。有什么想法吗?

1 个回答

8

如果你的个人资料类叫做 Profile,并且你没有使用 ForeignKey 的 related_name 属性来定制用户和个人资料之间的关系,那么你应该这样访问:

designs = Design.objects.filter(author__user__profile__screenname__icontains=w)

用户和个人资料之间有一种关系,所以你需要多加两个下划线。

撰写回答