extra 实现 别名,条件,排序等

extra 中可实现别名,条件,排序等,后面两个用 filter, exclude 一般都能实现,排序用 order_by 也能实现。我们主要看一下别名这个

比如 Author 中有 name, Tag 中有 name 我们想执行

SELECT name AS tag_name FROM blog_tag;

这样的语句,就可以用 select 来实现,如下:

In [44]: tags = Tag.objects.all().extra(select={‘tag_name’: ‘name’})

In [45]: tags[0].name

Out[45]: u’Django’

In [46]: tags[0].tag_name

Out[46]: u’Django’

我们发现 name 和 tag_name 都可以使用,确认一下执行的 SQL

In [47]: Tag.objects.all().extra(select={‘tag_name’: ‘name’}).query.str()

Out[47]: u’SELECT (name) AS “tag_name”, “blog_tag”.”id”, “blog_tag”.”name” FROM “blog_tag”’

我们发现查询的时候弄了两次 (name) AS “tag_name” 和 “blog_tag”.”name”

如果我们只想其中一个能用,可以用 defer 排除掉原来的 name (后面有讲)

In [49]: Tag.objects.all().extra(select={‘tag_name’: ‘name’}).defer(‘name’).query.str()

Out[49]: u’SELECT (name) AS “tag_name”, “blog_tag”.”id” FROM “blog_tag”’

也许你会说为什么要改个名称,最常见的需求就是数据转变成 list,然后可视化等,我们在下面一个里面讲。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值