Django错误与更新视图关联的模型与外键



我有一个模型,ProjectNoteComments,这是在ProjectNotes上添加评论。注释与注释相关,而注释通过外键与项目相关。ProjectNoteComments通过ProjectNotesDetailView视图显示。

当我添加ProjectNoteCommentUpdateview和相应的链接到注释细节视图页面时,我得到以下错误:没有找到带有参数'(6,9,20)'的'project_note_comment_update'的反转。1模式(s)尝试:['项目/注意/(? P[0 - 9] +)/评论/评论:pk/更新 Z ']

我还没能想出解决这个问题的办法。

视图:

class ProjectNotesDetailView(FormMixin, DetailView):
model = ProjectNotes
id = ProjectNotes.objects.only('id')
template_name = 'company_accounts/project_note_detail.html'
comments = ProjectNotes.comments
form_class = NoteCommentForm
crumbs = [...]
def form_valid(self, form):
projectnote = get_object_or_404(ProjectNotes, id=self.kwargs.get('pk'))
comment = form.save(commit=False)
comment.projectnote = projectnote
comment.created_by = self.request.user
comment.save()
return super().form_valid(form)
def get_success_url(self):
return reverse('company_project:project_note_detail', args=[self.kwargs.get('pk'), (self.object.id)])
def post(self, request, *args, **kwargs):
if not request.user.is_authenticated:
return HttpResponseForbidden()
self.object = self.get_object()
form = self.get_form()
if form.is_valid():
return self.form_valid(form)
else:
return self.form_invalid(form)
class ProjectNoteCommentUpdateView(UpdateView):
model = ProjectNoteComments
template_name = 'company_accounts/update_project_note_comment.html'
fields = ['body']
def get_success_url(self):
return reverse('company_project:project_note_detail', args=[self.kwargs.get('pk'), (self.object.id)])

的url
path('project/<int:project_pk>/note/<int:pk>/', ProjectNotesDetailView.as_view(), name='project_note_detail'),
path('note/<int:pk>/comment/comment:pk/update', ProjectNoteCommentUpdateView.as_view(), name='project_note_comment_update'),

相关模板代码

link on Projectnotedetail page:
<div class="header-edit-link col-sm">
{% if perms.company_project.can_change %}
<div><a href="{% url 'company_project:project_note_comment_update' object.project.pk object.pk comment.pk %}"><i class="fa fa-pencil mr-1"></i>edit</a></div>
{% endif %}
</div>
Update project note comment page:
{% extends 'base.html' %}
{% load crispy_forms_tags %}
{% block title %}Update Comment{% endblock title %}
{% block content %}
<div class="section-container container">
<div class="general-form pl-md-5 pr-md-5">
<h2>Update Comment</h2>

<form action="" method="post">
{% csrf_token %}
{{ form.media }}
{{ form|crispy }}
</br>
<input type="submit" value="update">
</form>
</div>
</div>
{% endblock content %}

在一些帮助下,我能够解决这个问题。首先,我将相关的URL更改为:

path('project/<int:project_pk>/note/<int:projectnotes_pk>/comment/<int:pk>/update', ProjectNoteCommentUpdateView.as_view(), name='project_note_comment_update'),
然后我把get_success_url改成:
def get_success_url(self):
return reverse('company_project:project_note_detail', args=[self.kwargs.get('project_pk'), self.kwargs.get('projectnotes_pk')])

ProjectNoteDetail页面上的相关链接更改为:

<div><a href="{% url 'company_project:project_note_comment_update' object.project.pk projectnotes.pk comment.pk %}"><i class="fa fa-pencil mr-1"></i>edit</a></div>

最新更新