在我的Django应用程序中,我需要显示一个用户列表(名为user_ids
),他们:
username
,avatar
和score
。
从用户模型中检索username
,avatar
模型中存在score
和UserProfile
(具有一对一的字段指向User
模型,名为user
)。
目前我的方法是获取完整的对象(见下文),即使我只需要两个模型中的3个属性。
对于我来说,只检索所需字段的最有效方法是什么,没有别的?现在我知道我能做到:
usernames = User.objects.filter(id__in=user_ids).values_list('username',flat=True)
scores_and_avatars = UserProfile.objects.filter(user_id__in=user_ids).values_list('score','avatar')
但是,这些为我提供了单独的查询集,因此我无法将它们作为统一的object_list
进行迭代,并在每个用户的username
,score
和avatar
中显示Django模板。那么检索和汇总这些信息的最有效,最轻量级的方法是什么呢?
目前,我正在执行以下操作来检索这三个字段:queryset = User.objects.select_related('userprofile').filter(id__in=user_ids)
答案 0 :(得分:1)
使用values的最有效方式,您的查询将如下所示:
usernames = User.objects.filter(id__in=user_ids).values('username', 'userprofile__score', 'userprofile__avatar')
此解决方案将返回字典,但您可以尝试使用only而不是值,它会使用指定的字段创建django模型对象,但如果您尝试访问未指定的字段,则#39} ; ll生成其他查询。
usernames = User.objects.filter(id__in=user_ids).select_related('userprofile').only('username', 'userprofile__score', 'userprofile__avatar')