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

Django: Make a Queryset with annotate using an object's property

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

    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

您尝试访问变量 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.