django静态注释

Tri*_*daz 26 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
Run Code Online (Sandbox Code Playgroud)

我试过像代码一样

cars= Car.objects.all().annotate(sales=0)
Run Code Online (Sandbox Code Playgroud)

但是有错误.我能做什么?

干杯,戴夫

--Tindind在Fedang #django上

Sve*_*nze 70

从Django 1.8开始,annotate功能Value表达式:

cars= Car.objects.all().annotate(sales=Value(0, IntegerField()))
Run Code Online (Sandbox Code Playgroud)

而不是IntegerField你可以使用所有可用的db字段类.

  • 现在,这实际上是更好的答案。如果尚未弃用,则extra()将被保留。 (2认同)

Man*_*dan 10

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

Car.objects.all().extra(select = {'sales': 0})
Run Code Online (Sandbox Code Playgroud)

  • “这是一个旧的 API,我们的目标是在将来的某个时候弃用” https://docs.djangoproject.com/en/2.2/ref/models/querysets/#django.db.models.query.QuerySet.extra (2认同)