python - 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 个数据,它不是完美的循环
那么有人可以帮我解决这个问题,或者有一个解决它的魔术吗?
解决方案
我相信您需要做的就是更正您过滤 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 对象中获取您想要的任何字段。
推荐阅读
- java - 我们如何才能减慢 libGdx 中的渲染方法速度?
- twitter-bootstrap - 从按钮关闭 Vue 模式
- python - 为什么 Python 3 的 cx_freeze 将一个项目打包成 8000+ 个文件,而 Python 2 的 cx_freeze 将同一个项目打包成 25 个文件?
- regex - 正则表达式在 regex101 中匹配,但在 TypeScript 正则表达式测试中不匹配
- r - 对应于零值特征值的特征向量在 R 中的 eigen 和 prcomp 之间是不同的
- javascript - 修改 JS 倒计时包括 GMT+12 和重启前的消息
- javascript - 根据先前的值设置正则表达式数字范围
- python - 查找数据帧的哪些行存在于另一个数据帧中
- python - 如何使用 SPARQLWrapper 处理 Wikidata 上的“太多请求”?
- python - 将 PyQt4 代码适配到 PyQt5,SIGNAL 的问题