【问题标题】:django static annotationdjango静态注解
【发布时间】:2010-08-28 10:03:27
【问题描述】:

我想使用 django 为数据库查询的结果添加一个静态值(因此不使用“原始”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 #django 上的 Trindaz

【问题讨论】:

    标签: python django


    【解决方案1】:

    Django 功能Value expressions:

    from django.db.models import Value
    
    cars= Car.objects.annotate(sales=Value(0))
    

    在 Django 3.2 之前,指定字段类:

    from django.db.models import Value, IntegerField
    
    cars= Car.objects.annotate(sales=Value(0, IntegerField())) 
    

    您可以使用所有可用的数据库字段类来代替IntegerField

    【讨论】:

    • 这实际上是现在更好的答案。如果尚未弃用,extra() 将会被弃用。
    • 当我使用这种方法(在 Django 3.0 中)时,我发现 sales 列正在填充 None 而不是 0
    • 这适用于我在 Django 3.2 中,只需使用 .annotate=Value(0)
    【解决方案2】:

    更新

    此解决方案使用即将弃用的 API。请参阅this answer 了解解决此问题的更好方法。

    原答案

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

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

    【讨论】:

    猜你喜欢
    • 2020-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-15
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    • 2019-10-26
    相关资源
    最近更新 更多