【问题标题】:Django show name of reference not idDjango显示参考名称而不是ID
【发布时间】:2021-03-01 21:26:38
【问题描述】:

我创建的这个简单的数据库

然后这是我在 view.py 中显示数据的代码

    ...
    def get (request, photo_id)
    
    tag = PhotoTag.objects \
           .values('tag_id') \
           .filter(photo_id = photo_id) \
           .all()

    context  = {
            ...
            'my_tag': tag
}

这是在我的模板中

{% for data in my_tag %}
    {{ my_tag.tag_id }}
{% endfor %}

结果是数字,我需要的是显示另一个表(标签表)的数据,比如 my_tag => tag_id => name (of another table)

当我在 view.py 中做另一种方式时

tag = PhotoTag.objects \
           .values('tag_id') \
           .filter(photo_id = photo_id) \
           .all()

for data in tag:
       tag_name = Tag.objects \
           .values('name') \
           .filter(id=data.get('tag_id')) \

context = {
     ...,
     'my_tag': tag_name,
}

然后在模板中

{% for data in my_tag %}
     {{ my_tag.name }}
{% endfor %}

结果是我需要的(显示引用表的文本名称)但它只有 1 个数据,它不是完美循环

那么有人可以帮我解决这个问题,或者有一个解决它的魔术吗?

【问题讨论】:

    标签: python django django-templates django-queryset relationship


    【解决方案1】:

    你可以这样做:

    查看

    photo_tags = PhotoTag.objects.filter(photo_id=photo_id).values('tag_id')
    
    context = {'photo_tags': photo_tags}
    

    模板:

    {% for photo_tag in photo_tags %}
        {% photo_tag.tag_id.name %}
    {% endfor %}
    

    【讨论】:

      【解决方案2】:

      我相信您需要做的就是更正您过滤 PhotoTag 模型以生成查询集的行。

      查看:

      photo_tags = PhotoTag.objects.filter(photo_id=photo_id)
      
      context = {'photo_tags': photo_tags}
      

      这应该会为您提供一组与给定 id 匹配的所有 PhotoTag 对象

      然后在你的模板中:

      {% for pt in photo_tags %}
          {% pt.tag_id.name %}
      {% endfor %}
      

      一旦您拥有与给定 ID 匹配的所有 PhotoTag 集合,您就可以在模板中循环遍历该集合并从 PhotoTag 对象中获取您想要的任何字段。

      【讨论】:

        猜你喜欢
        • 2021-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-17
        • 1970-01-01
        • 1970-01-01
        • 2018-07-21
        相关资源
        最近更新 更多