Django中如何基于表中外键关联的另一表值查询数据并传递给模板
问题原因与修复方案
1. 视图函数错误修复
你之前的filter写法不符合Django ORM的语法规则,filter需要传入字段名=匹配值的键值对参数,直接传入字符串会触发解包错误。
你已经通过pk拿到了对应的GameName对象,直接利用外键的related_name就能快速拿到关联的所有Record记录,正确的视图代码如下:
def game_record(request, pk): gamename = get_object_or_404(GameName, pk=pk) # 直接通过外键反向关联拿所有对应记录,related_name就是你定义的records records = gamename.records.all() # 也可以写成 records = Record.objects.filter(game=gamename),效果一致 content = {'gamename': gamename, 'records': records} return render(request, 'speed_run_game_records.html', content)
你之前碰到的报错原因:
too many values to unpack:filter方法预期接收键值对参数,你传入了单个字符串,ORM解析参数失败Record not being iterable:错误的查询写法返回了单条Record对象而非可迭代的查询集,或者模板变量引用错误
2. 模板代码错误修复
你模板里有两处逻辑错误:
- 循环变量是
record,你在循环体内误用了复数的records,导致取不到单条记录的属性 Record模型没有name字段,玩家名字段是player
修改后的模板循环部分代码如下:
{% for record in records %} <tbody> <tr class="tBody"> <td>{{ record.player }}</td> <td>{{ record.time }}</td> <td>{{ record.platform }}</td> <td>{{ record.date }}</td> </tr> </tbody> {% endfor %}
内容的提问来源于stack exchange,提问作者pointillustrated
相关产品推荐
相关产品推荐

