Проблема поиска комментария для ответа на него с помощью django-mptt для вложенных комментариев в блоге

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

Через форму я могу отобразить все посты и родительские поля, что позволяет пользователю выбрать пост и комментарий. Но проблема в том, что они могут комментировать любой пост и любой комментарий в списке. Пытаюсь реализовать логику, при которой, если пользователь находится на этом посте, он может комментировать только этот пост и может выбрать, на какой комментарий (если захочет) ответить.

Вот модель:

class Comment(MPTTModel):

    post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='comments')
    name = models.CharField(max_length=100)
    parent = TreeForeignKey('self', on_delete=models.CASCADE,
                            null=True, blank=True, related_name='children')
    body = models.TextField()
    created_on = models.DateTimeField(auto_now_add=True)

    class MPTTMeta:
        order_insertion_by = ['created_on']

    def __str__(self):
        return f"Comment {self.body} by {self.name}"

Вид:

def CommentView(request, pk):
    post = get_object_or_404(Post, id=request.POST.get('post_id'))

    comment_form = CommentForm(data=request.POST)
    if comment_form.is_valid():
        comment_form.instance.name = request.user.username
        comment = comment_form.save(commit=False)
        comment.post = post
        comment.save()
    else:
        comment_form = CommentForm()

    return HttpResponseRedirect(reverse('post_detail', args=[str(pk)]))

Форма:

class CommentForm(forms.ModelForm):

    class Meta:
        model = Comment
        fields = ('post', 'body', 'parent',)
        labels = {
            'body': '',
            'parent': ''
        }

        widgets = {
            'body': forms.Textarea(attrs={'class': 'form-control', 'placeholder': 'Write Your Comment Here'}),
            'parent': forms.Select(attrs={'required': False}),
        }

Комментарии к отображению шаблона:

<div class="blog-comment">
                        <h3>Comments</h3>
                        <ul class="comments">
                            {% load mptt_tags %}
                            {% recursetree comments.all %}
                            <li >
                                <img class="avatar"
                                    src="">
                                <div class="post-comments">
                                    <p class="meta">{{ node.created_on }} {{ node.name }} 
                                        says :
                                    <p id="{{ node.id }}">{{ node.body }}</p>

                                </div>
                            </li>
                            {% if not node.is_leaf_node %}
                            <ul class="comments">
                                <li>{{ children }}</li>
                            </ul>
                            {% endif %}
                            {% endrecursetree %}
                        </ul>
                    </div>

Форма комментария в шаблоне:

<div>
                            {% if user.is_authenticated %}
                            <p>Leave a comment as: {{ user.username }}</p>
                            <form action="{% url 'comment_post' post.pk %}" method="POST">
                                {% csrf_token %}
                                {{ comment_form }}
                                <button type="submit" name="post_id" value="{{ post.id }}"
                                    class="btn btn-primary mt-3">Submit</button>
                            </form>
                            {% else %}
                            <small><a href="{% url 'login' %}">Login</a> to comment</small>
                            {% endif %}
</div>

Любая помощь будет очень признательна.

Вернуться на верх