Django含外键模型的UpdateView反向解析错误求助
问题解决步骤
1. 修复URL配置错误
你的project_note_comment_update URL存在语法错误,且参数数量与模板传递的参数不匹配。将URL配置修改为:
path('project/<int:project_pk>/note/<int:note_pk>/comment/<int:comment_pk>/update/', ProjectNoteCommentUpdateView.as_view(), name='project_note_comment_update'),
- 这里定义了三个参数:
project_pk(项目ID)、note_pk(笔记ID)、comment_pk(评论ID),和模板中传递的三个参数完全对应。 - 原URL中的
comment:pk是语法错误,Django URL参数必须遵循<类型:参数名>的格式。
2. 修正ProjectNotesDetailView的成功跳转路径
原get_success_url传递了重复的笔记ID,需改为传递项目ID和笔记ID:
def get_success_url(self): return reverse('company_project:project_note_detail', args=[self.object.project.pk, self.object.id])
self.object.project.pk获取当前笔记关联的项目ID,self.object.id是笔记ID,与project_note_detail的URL参数匹配。
3. 修正ProjectNoteCommentUpdateView的配置
3.1 指定主键参数
由于URL中评论的主键参数是comment_pk,需要告诉UpdateView使用该参数查找评论:
class ProjectNoteCommentUpdateView(UpdateView): model = ProjectNoteComments template_name = 'company_accounts/update_project_note_comment.html' fields = ['body'] pk_url_kwarg = 'comment_pk' # 新增:指定用comment_pk作为主键参数
3.2 修正成功跳转路径
跳转回笔记详情页需要项目ID和笔记ID,需从当前评论关联的笔记中获取:
def get_success_url(self): project_pk = self.object.projectnote.project.pk note_pk = self.object.projectnote.pk return reverse('company_project:project_note_detail', args=[project_pk, note_pk])
4. 确认模板URL参数匹配
模板中的URL标签传递的object.project.pk(项目ID)、object.pk(笔记ID)、comment.pk(评论ID)与修改后的URL参数完全匹配,无需调整:
<a href="{% url 'company_project:project_note_comment_update' object.project.pk object.pk comment.pk %}">
完成以上修改后,反向解析错误即可解决,评论更新功能可正常工作。
内容的提问来源于stack exchange,提问作者Finn
相关产品推荐
相关产品推荐

