【问题标题】:Django: Make a Queryset with annotate using an object's propertyDjango:使用对象的属性创建一个带有注释的查询集
【发布时间】:2021-02-02 11:47:02
【问题描述】:

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

【问题讨论】:

    标签: python django django-views django-annotate


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2020-05-14
      • 2018-04-11
      • 2021-10-26
      • 1970-01-01
      • 2021-10-17
      • 1970-01-01
      • 1970-01-01
      • 2019-12-11
      • 2018-04-25
      相关资源
      最近更新 更多