django静态注释

时间:2010-08-28 10:03:27

标签: python django

我想使用django为数据库查询的结果添加一个静态值(所以不使用'raw'SQL)

例如,如果我有一个带有字段make,model和color的对象Car,那么我希望我的结果集具有额外的静态值,如下所示:

make     model     color    sales
----     -----     -----    -----
nissan   bluebird  black    0
ford     fiesta    red      0
toyota   camry     green    0

我尝试了像

这样的代码
cars= Car.objects.all().annotate(sales=0)

但有错误。我该怎么办?

干杯, 戴夫

- 关于Fedang的Trindaz #django

4 个答案:

答案 0 :(得分:56)

自Django 1.8起,maven-bundle-plugin功能Value expression

annotate

您可以使用所有可用的数据库字段类而不是cars= Car.objects.all().annotate(sales=Value(0, IntegerField()))

答案 1 :(得分:9)

您可以使用extra()方法。像这样:

Car.objects.all().extra(select = {'sales': 0})

答案 2 :(得分:2)

我意识到原来的问题是不要使用' raw' SQL,但是从Django 1.8开始,不鼓励使用extra()。来自docs

  

将此方法用作最后的手段

     

这是一个旧的API,我们的目标是在某个时候弃用   将来

对于其他尝试做同样事情且愿意使用一小段原始SQL的人来说,仍然使用Django的API与annotate()RawSQL的替代方法是:< / p>

from django.db.models.expressions import RawSQL
Car.objects.all().annotate(sales=RawSQL('SELECT 0', ()))

答案 3 :(得分:0)

for car in Car.objects.all()
    setattr(car, 'sales', 0)

这将为查询集中的每个元素添加一个名为sales的字段,其值为0.此字段只能与此 car 实例一起使用。

已更新