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

问题描述

我的 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

解决方法

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