django:如何在queryset中编写别名

sus*_*ush 5 django django-models

如何在django查询集中为列名写别名.

例如在mysql中:

select m as n, b as a from xyz
Run Code Online (Sandbox Code Playgroud)

我怎么能在django查询集中这样做?

models.Table.objects.all().values('m', 'b')
Run Code Online (Sandbox Code Playgroud)

任何帮助真的很感激.

use*_*558 15

您可以根据需要使用F 表达式注释字段:

from django.db.models import F

models.Table.objects.all().values('m', 'b').annotate(n=F('m'), a=F('b'))
Run Code Online (Sandbox Code Playgroud)


Nat*_*ate 8

虽然这可以在使用之前完成extra(select={'n':'m','a':'b'}),但我同意这应该是values()它本身的一部分.

为此,在Alex的票据的启发下,我刚刚发布了一个增加此功能的补丁.我希望你会觉得它很有用!

  • 看起来像上面提到的额外不工作与django 1.4中的值 (3认同)

Dan*_*man 5

你在评论中的理由没有意义。模型中的每个字段在数据库中都有自己的列,并且永远不会有混淆它们的危险。您当然可以告诉字段使用与字段名称不同的列名称:

myfield = models.CharField(max_length=10, db_column='differentname')
Run Code Online (Sandbox Code Playgroud)

但我不知道这是否对你有帮助,因为我仍然不知道你的问题是什么。


Joh*_*ohn 0

我真的无法理解你想要做什么,但是听起来你正在寻找的是额外的查询集方法。在大多数情况下,这与 SQL 中的 AS 的行为方式相同。