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
相关产品推荐
相关产品推荐

