django:如何在queryset中写入别名

qvk1mo1f  于 2022-12-01  发布在  Go
关注(0)|答案(6)|浏览(162)

如何在django查询集中为列名写别名?对于两个链接到同一个外部模型的字段的联合样式组合(例如)很有用。
例如在mysql中:

select m as n, b as a from xyz

我怎么能在Django查询设置中做到这一点?

models.Table.objects.all().values('m', 'b')

任何帮助都非常感谢。

whitzsjs

whitzsjs1#

您可以使用F表达式根据需要对字段进行注解:

from django.db.models import F

models.Table.objects.all().values('m', 'b').annotate(n=F('m'), a=F('b'))
laximzn5

laximzn52#

虽然这在以前可以通过使用extra(select={'n':'m','a':'b'})来完成,但我同意这确实应该是values()本身的一部分。
为了达到这个目的,受Alex的启发,我刚刚发布了一个添加了这个特性的patch。我希望你会发现它很有用!

tp5buhyn

tp5buhyn3#

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

myfield = models.CharField(max_length=10, db_column='differentname')

但我不知道这对你有没有帮助,因为我还是不知道你问题是什么。

vlju58qv

vlju58qv4#

我认为这是不可能的,所以我已经提出了一个票的功能被添加,我认为有一些优点,能够做到这一点。请查看票的更多信息。
https://code.djangoproject.com/ticket/16735

wb1gzix0

wb1gzix05#

您也可以在查询集中使用.alias()。

第一个
对于您的特定情况,这将是答案

models.Table.objects.all().alias(
    n=F('m'), a=F('b')).values('m', 'a')
)
ia2d9nvy

ia2d9nvy6#

我真的不明白你想做什么,但是听起来你想找的是额外的queryset方法。这在大多数情况下的作用方式与sql中的AS相同。

相关问题