Django项目ID检索错误:获取项目ID而非资料ID的解决方案求助
问题核心原因
你的用户资料页路由需要接收Profil表的主键作为参数,但生成跳转链接时错误传入了Muzyka(项目)表的主键,导致ID匹配错误。
修复步骤
- 先修正视图代码的明显错误
当前MuzykaListView中m = Muzyka.objects.all缺少执行括号,会导致模板接收的是方法对象而非查询集,同时可以增加异常处理和登录校验提升稳定性,修正后代码如下:
from django.shortcuts import get_object_or_404 from django.contrib.auth.decorators import login_required # 加登录验证避免未登录用户访问时报错 @login_required def MuzykaListView(request): # 用get_object_or_404优化异常处理 profils = get_object_or_404(Profil, user=request.user) muza = Muzyka.objects.all() # 补充括号执行查询 m = Muzyka.objects.all() template_name = 'Muzyka_List.html' context = { 'm': m, 'profils': profils, 'muza': muza, } return render(request, template_name, context)
- 修正模板中的链接生成逻辑
原模板中生成用户资料链接时,错误传入了Muzyka实例的主键,需要替换为关联的Profil实例主键,即通过Muzyka表的外键字段wlasciciel获取对应用户资料ID:
<!-- 原错误写法示例 --> {% url 'profil_uzytkownika' muza.pk %} <!-- 修正后写法 --> {% url 'profil_uzytkownika' muza.wlasciciel.pk %} <!-- 循环渲染项目列表时的写法 --> {% for muzyka_item in m %} <a href="{% url 'profil_uzytkownika' muzyka_item.wlasciciel.pk %}">查看作者资料</a> {% endfor %}
- 确认
ShowProfilPage类视图逻辑
确保你的资料页类视图是基于Profil模型查询,示例正确写法如下:
from django.views.generic import DetailView from .models import Profil class ShowProfilPage(DetailView): # 指定查询Profil模型,而非Muzyka模型 model = Profil template_name = "你的资料页模板路径.html" context_object_name = "profil"
内容的提问来源于stack exchange,提问作者ProtoN
相关产品推荐
相关产品推荐

