请教一个 django 数据库查询字段重命名的问题

比如下面这段:

m.User.objects.values('id', 'coreuserwxprofile__nickname').filter( 
coreuserwxprofile__nickname__contains=q).all()[0:20] 

我要是希望返回结果是这样的:

[{'id':1,'nick':'tom'}] 

应该怎么做呢?
谢谢~~~

阅读 6.9k
3 个回答
from django.db.models import F

User.objects.annotate(nick=F('coreuserwxprofile__nickname')).values('id', 'nick')

两种办法, 自己挑一种吧
第一种:

users = User.objects.filter(coreuserwxprofile__nickname__contains=q).values('id', 'coreuserwxprofile__nickname')[0:20]

users = [{'id': _.id, 'nick': _.coreuserwxprofile__nickname} for _ in users]

第二种:

users = User.objects.filter(coreuserwxprofile__nickname__contains=q).extra(
    select = {'nick': 'coreuserwxprofile.nickname'}
).values('id', 'nick')[0:20]
新手上路,请多包涵

from django.db.models import F

User.objects.values('id', nick=F('coreuserwxprofile__nickname'))

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题