Django:使用对象的属性创建带有注释的查询集

时间:2021-02-02 11:47:02

标签: python django django-views django-annotate

我的 Django views.py 中有一个查询集。我正在使用 annotate 根据每个对象的 promo 向每个对象添加一个 id 属性。但是这不起作用:

    bytes = Byte.objects.filter(
        published=True
    ).annotate(
        # add path to promo image based on byte's id property
        promo=Value('../static/images/promo-'+id+'.png', output_field=CharField())
    ).order_by(
        '-publish_date'
    )

我收到错误:name 'id' is not defined

1 个答案:

答案 0 :(得分:1)

您尝试访问变量 id 的方式。尝试使用 Concat 函数:

from django.db.models.functions import Concat

bytes = Byte.objects.filter(
    published=True
).annotate(
    # add path to promo image based on byte's id property
    promo=Concat(Value('../static/images/promo-'), 'id', Value('.png'), output_field=CharField())
).order_by(
    '-publish_date'
)

参考:Django database Functions - Concat

相关问题