You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 12:50:04