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

Django项目报错:'QuerySet' object has no attribute 'id' 求解

Django中获取SchoolDetail数据时出现'QuerySet' object has no attribute 'id'错误的解决方法

错误原因

SchoolDetail.objects.all()返回的是QuerySet对象(多条记录的集合),而非单个SchoolDetail模型实例。QuerySet是一组对象的集合,不存在id属性,直接调用school_details.id自然会报错。

代码问题分析

  • 在views.py中,错误地尝试从整个QuerySet获取id值,实际上每个学校记录的id需要从循环中的单个实例获取。
  • 模板中错误使用全局的school_details_pk,而非当前循环项的id。

修复方案

1. 修正views.py

无需额外传递school_details_pk,直接将QuerySet传入模板即可:

def SchoolPage(request):
    school_details = SchoolDetail.objects.all()
    context = {'school_details': school_details}
    return render(request, 'busschool.html', context)

2. 修正模板代码

在循环中直接使用当前学校实例的id作为编辑链接的参数:

<tbody>
    {% for i in school_details %}
    <tr>
        <td>{{i.school_name}}</td>
        <td>{{i.school_place}}</td>
        <td>{{i.school_email}}</td>
        <td>{{i.school_address}}</td>
        <td>{{i.school_phone}}</td>
        <td>{{i.is_verified}}</td>
        <td><a href="{% url 'schooledit' i.id %}">click</a></td>
    </tr>
    {% endfor %}
</tbody>

3. 确保编辑视图和URL配置正确

  • 编辑视图需要接收pk参数并获取对应的学校记录:
def SchoolEdit(request, pk):
    # 获取要编辑的单个学校记录
    school_detail = SchoolDetail.objects.get(pk=pk)
    # 后续编辑逻辑(比如处理表单提交)
    ...
  • URLs配置需要定义pk参数:
from django.urls import path
from . import views

urlpatterns = [
    # 其他URL...
    path('school/edit/<int:pk>/', views.SchoolEdit, name='schooledit'),
]

内容的提问来源于stack exchange,提问作者Noel S Jacob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 08:40:30