Django点击通知链接提示Invitation匹配查询不存在的解决方法
问题解决步骤
1. 修正URL名称的大小写不匹配
你的URL配置中视图名称是invitation_information(全小写),但信号里reverse调用时写的是Invitation_Information(大小写混合),Django的URL名称区分大小写,这会导致生成的链接指向错误地址。
修改信号代码中的reverse部分:
# 原代码 link = reverse('Invitation_Information', args=[str(instance.room_type.slug)]) # 修改后 link = reverse('invitation_information', args=[str(instance.slug)])
2. 传递正确的Slug参数
当前你传递给链接的是Room模型的slug,但视图是通过Invitation模型的slug查询数据,两者完全不匹配,这是触发Invitation matching query does not exist错误的核心原因。
上面的修改已经将参数替换为instance.slug(当前创建的Invitation对象自身的slug),确保视图能通过该slug找到对应的Invitation记录。
3. 可选:添加异常处理增强健壮性
为避免用户手动输入无效slug导致服务器报错,建议在视图中捕获DoesNotExist异常,返回404页面:
from django.shortcuts import get_object_or_404 def invitation_information(request, slug): invitation = get_object_or_404(Invitation, slug=slug) return render(request, 'invitations.html', {'invitation':invitation})
验证修改
- 重新创建Invitation对象,触发信号生成新的Notification
- 检查Notification的
link字段,确认slug为Invitation自身的slug而非Room的slug - 点击通知链接,即可正常显示对应Invitation的信息
内容的提问来源于stack exchange,提问作者Bubble
相关产品推荐
相关产品推荐

