Django Ошибка при обновлении представления, ассоциированного с моделью с внешними ключами

У меня есть модель, ProjectNoteComments, которая предназначена для добавления комментариев к ProjectNotes. Комментарии связаны с заметками, а заметки связаны с проектами через внешние ключи. ProjectNoteComments отображаются через представление ProjectNotesDetailView.

Когда я добавляю ProjectNoteCommentUpdateview и соответствующую ссылку на страницу детального просмотра заметки, я получаю следующую ошибку: Reverse for 'project_note_comment_update' with arguments '(6, 9, 20)' not found. Попробовано 1 шаблон(ы): ['projects/note/(?P[0-9]+)/comment/comment:pk/update\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)])

URLs

    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>
Вернуться на верх