如何在 Django 查询集中为列名编写别名。 对于两个链接字段到同一个外部模型(例如)的联合式组合很有用。
例如在 mysql 中:
select m as n, b as a from xyz
我怎么能在 Django 查询集中做到这一点?
models.Table.objects.all().values('m', 'b')
任何帮助真的很感激。
您可以根据需要注释字段,使用 F 表达式:
from django.db.models import F
models.Table.objects.all().values('m', 'b').annotate(n=F('m'), a=F('b'))
你在评论中的理由毫无意义。模型中的每个字段在数据库中都有自己的列,永远不会有混淆它们的危险。您当然可以告诉字段使用与字段名称不同的列名称:
myfield = models.CharField(max_length=10, db_column='differentname')
但我不知道这是否对你有帮助,因为我仍然不知道你的问题是什么。
我假设这是不可能的,所以我已经提出了要添加的功能的票,我认为能够做到这一点有一些优点。请查看门票以获取更多信息。
您还可以在查询集中使用 .alias()。
.alias(alias=SomeExpression()).annotate(
SomeOtherExpression('alias'))
.alias(alias=SomeExpression()).order_by('alias')
.alias(alias=SomeExpression()).update(field=F('alias'))
对于您的具体情况,这就是答案
models.Table.objects.all().alias(
n=F('m'), a=F('b')).values('m', 'a')
)
我真的不明白你想做什么,但听起来你正在寻找的是 extra 查询集方法。在大多数情况下,这与 AS 在 sql 中的行为方式相同。