Mar*_*tin 86 django django-orm
我想在djangoproject.com的这张票中做同样的事情,但是有一些额外的格式.从这个查询
>>> MyModel.objects.values('cryptic_value_name')
[{'cryptic_value_name': 1}, {'cryptic_value_name': 2}]
Run Code Online (Sandbox Code Playgroud)
我希望得到类似的东西:
>>> MyModel.objects.values(renamed_value='cryptic_value_name')
[{'renamed_value': 1}, {'renamed_value': 2}]
Run Code Online (Sandbox Code Playgroud)
是否有其他更内置的方式或我必须手动执行此操作?
ale*_*dnm 159
从django>=1.8
您可以使用annotate和F对象
from django.db.models import F
MyModel.objects.annotate(renamed_value=F('cryptic_value_name')).values('renamed_value')
Run Code Online (Sandbox Code Playgroud)
也extra()
将被弃用,来自django文档:
这是一个旧的API,我们打算在将来的某个时候弃用.仅当您无法使用其他查询集方法表达查询时才使用它.如果您确实需要使用它,请使用您的用例使用QuerySet.extra关键字提交票证(请先检查现有票证列表),以便我们可以增强QuerySet API以允许删除extra().我们不再改进或修复此方法的错误.
Dan*_*man 63
这有点hacky,但你可以使用这个extra
方法:
MyModel.objects.extra(
select={
'renamed_value': 'cryptic_value_name'
}
).values(
'renamed_value'
)
Run Code Online (Sandbox Code Playgroud)
这基本上SELECT cryptic_value_name AS renamed_value
在SQL中.
另一个选项,如果您总是希望重命名的版本但数据库具有隐藏名称,则使用新名称命名您的字段,但用于db_column
引用数据库中的原始名称.
Arp*_*ngh 54
不使用任何其他管理器方法(测试v2.0.8
):
from django.db.models import F
MyModel.objects.values(renamed_value=F('cryptic_value_name'))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
42822 次 |
最近记录: |