首页 > 解决方案 > Django显示参考名称而不是ID

问题描述

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

图像

然后这是我在 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 个数据,它不是完美的循环

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

标签: pythondjangodjango-templatesdjango-querysetrelationship

解决方案


我相信您需要做的就是更正您过滤 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 对象中获取您想要的任何字段。


推荐阅读