Редактируемые комментарии django blog

У меня проблемы с редактированием моих комментариев. Они работают нормально, если я оставляю их нередактируемыми, но я хочу, чтобы они были редактируемыми. Я думаю, что это как-то связано с первичными ключами, но я не совсем понимаю, как это сделать. Ранее я мог редактировать комментарии, но всегда редактировался последний комментарий.

Вот мой код:

models.py


    class Tee_times(models.Model):
    
        viable_courses = [
            ("Eslövs GK","Eslövs GK"),
            ("Lunds Akademiska GK","Lunds Akademiska GK"),
            ("Söderåsens GK","Söderåsens GK")
        ]
    
        title = models.CharField(max_length=100, choices=viable_courses, default=1)
        content = models.TextField()
        pub_date = models.DateTimeField(auto_now_add=True)
        player = models.ForeignKey(User, on_delete=models.CASCADE)
    
        def __str__(self):
            return self.title
    
        def get_absolute_url(self):
            return reverse("post-detail", kwargs={"pk": self.pk})
    
    class Comment(models.Model):
        text = models.CharField(max_length=200, default="Write a comment")
        tee_time = models.ForeignKey(Tee_times, related_name="comments", on_delete=models.CASCADE)
        pub_date = models.DateTimeField(auto_now_add=True)
        player = models.ForeignKey(User, on_delete=models.CASCADE)
    
        class Meta:
            ordering = ("pub_date",)
    
        def __str__(self):
            return f"{self.player} - {self.pub_date}"
    
        def get_absolute_url(self):
            return reverse("post-detail", kwargs={"pk": self.tee_time.pk})
    
        def set_time(self):
            self.pub_date = models.DateTimeField(auto_now_add=True)

urls.py


    urlpatterns = [
        path('', TeeListView.as_view(), name="index"),
        path('post/<int:pk>/', DetailTeeView.as_view(), name="post-detail"),
        path('post/<int:pk>/comment/new/', CommentCreateView.as_view(), name="comment-create"),
        path('post/<int:pk>/comment/<int:pkc>/update/', CommentUpdateView.as_view(), name="comment-update"),
        path('post/<int:pk>/comment/<int:pkc>/delete/', CommentDeleteView.as_view(), name="comment-delete"),
        path('post/new/', TeeCreateView.as_view(), name="post-create"),
        path('post/<int:pk>/update/', TeeUpdateView.as_view(), name="post-update"),
        path('post/<int:pk>/delete/', TeeDeleteView.as_view(), name="post-delete"),
        path("second/", views.second, name="second"),
        path("register/", user_views.register, name="Register")
    ]

views.py

```
class TeeListView(ListView):
    model = Tee_times
    template_name = "testapp/index.html"
    context_object_name = "posts"
    ordering = ["-pub_date"]

class DetailTeeView(DetailView):
    model = Tee_times

class TeeCreateView(LoginRequiredMixin, SuccessMessageMixin, CreateView):
    model = Tee_times
    fields = ["title",
              "content"]

    success_message = "New Tee Time Created!"

    def form_valid(self, form):
        form.instance.player = self.request.user
        return super().form_valid(form)

class TeeDeleteView(LoginRequiredMixin, UserPassesTestMixin, SuccessMessageMixin, DeleteView):
    model = Tee_times
    success_url = "/"
    success_message = f"The tee time was successfully deleted!"

    def test_func(self):
        tee_time = self.get_object()
        if self.request.user == tee_time.player:
            return True
        else:
            return False



class TeeUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
    model = Tee_times
    fields = ["title",
              "content"]

    def form_valid(self, form):
        form.instance.player = self.request.user
        return super().form_valid(form)

    # goes through userpassestexstmixin
    def test_func(self):
        tee_time = self.get_object()
        if self.request.user == tee_time.player:
            return True
        else:
            return False

class CommentCreateView(CreateView):
    model = Comment
    fields = ["text"]

    def form_valid(self, form):
        form.instance.tee_time_id = self.kwargs["pk"]
        form.instance.player = self.request.user
        return super().form_valid(form)



class CommentDeleteView(LoginRequiredMixin, UserPassesTestMixin, SuccessMessageMixin, DeleteView):
    model = Comment
    success_url = "/"
    success_message = f"The comment was successfully deleted!"

    def test_func(self):
        comment = self.get_object()
        if self.request.user == comment.player:
            return True
        else:
            return False


class CommentUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
    model = Comment
    fields = ["text"]

    def form_valid(self, form):
        form.instance.tee_time_id = self.kwargs["pk"]
        form.instance.player = self.request.user
        return super().form_valid(form)

    # goes through userpassestexstmixin
    def test_func(self):
        comment = self.get_object()
        if self.request.user == comment.player:
            return True
        else:
            return False

В вашем urls.py

  path('post/<int:pk>/comment/<int:pkc>/update/', CommentUpdateView.as_view(), name="comment-update"),
    path('post/<int:pk>/comment/<int:pkc>/delete/', CommentDeleteView.as_view(), name="comment-delete"),

Вы увидите, что для каждого из них требуется две переменные, pk и pkc. Однако при создании URLS у вас есть только одна переменная, comment.id

             {% if comment.player == user %}
                    <a class="btn btn-secondary btn-sm mt-1 mb-1" href="{% url 'comment-update' comment.id %}">Update</a>
                    <a class="btn btn-danger btn-sm mt-1 mb-1" href="{% url 'comment-delete' comment.id %}">Delete</a>
                {% endif %}

Вам нужно включить вторую переменную, pk для поста, чтобы URL совпадали, например

{% url 'comment-update' object.id comment.id %}
Вернуться на верх