Django项目中外键关联模型数据无法在模板返回问题求助
问题修复方案
1. 修正模型代码中的拼写错误
你的模型代码存在多处拼写错误,这会直接导致功能失效,先修正基础问题:
# Models.py from django.db import models # 确保导入models模块 class Mymodel1(models.Model): # 修正拼写错误:moels → models name = models.CharField(max_length=20) blurb = models.CharField(max_length=20) created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField(auto_now=True) class Mymodel2(models.Model): # 修正拼写错误:moels → models # 修正拼写错误:Mymdoel1 → Mymodel1;将外键字段名改为更清晰的mymodel1,避免和Mymodel1的name字段混淆 # 添加related_name方便后续反向查询关联数据 mymodel1 = models.ForeignKey(Mymodel1, on_delete=models.CASCADE, related_name='mymodel2s') somethingelse = models.CharField(max_length=20)
2. 修正视图代码的逻辑与错误
视图里存在认证判断错误、变量名不匹配、关联数据查询逻辑错误等问题,修正后代码如下:
from django.shortcuts import render from .models import Mymodel1, Mymodel2 def get_details(request, id): # 正确判断用户登录状态:用request.user.is_authenticated而非User类属性 if request.user.is_authenticated: try: single_record = Mymodel1.objects.get(id=id) # 修正拼写错误:Mymodle1 → Mymodel1 # 通过反向查询直接获取关联的Mymodel2数据,无需手动匹配id # 若关联多条数据用all(),单条数据用get()(需确保关联唯一) details = single_record.mymodel2s.all() except Mymodel1.DoesNotExist: # 处理Mymodel1记录不存在的情况,比如返回404页面 return render(request, '404.html') except Mymodel2.DoesNotExist: # 处理无关联Mymodel2数据的情况 details = None # 统一变量名:确保视图变量与context变量对应,避免无意义错误 context = { 'single_asset': single_record, 'details': details, } return render(request, 'detail.html', context=context) else: return render(request, 'home.html')
3. 模板中调用关联数据
如果details是多条数据(用all()获取),模板用循环遍历:
<!-- detail.html --> <h1>{{ single_asset.name }}</h1> <p>{{ single_asset.blurb }}</p> <h2>关联信息</h2> {% if details %} {% for item in details %} <p>{{ item.somethingelse }}</p> {% endfor %} {% else %} <p>暂无关联数据</p> {% endif %}
如果是单条关联数据(用get()获取),直接访问字段即可:
<p>关联内容:{{ details.somethingelse }}</p>
内容的提问来源于stack exchange,提问作者jlusco
相关产品推荐
相关产品推荐

