我想使用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
答案 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 实例一起使用。
已更新