如何在Django中按用户资料属性过滤查询?
我有两个模型,分别是 Design
和 Profile
。在 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)
用户和个人资料之间有一种关系,所以你需要多加两个下划线。