Функция одобрения комментариев

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

функция:

def approve(request, pk):
    # вытаскиваем текущего пользователя
    user = request.user
    # вытаскиваем коммент по pk, неодобренный
    coms = Comment.objects.get(pk=pk, is_accepted=False)
    if request.method == 'POST':
        # меняем значение
        coms.is_accepted = True
        # привязываем к юзеру
        coms.user = request.user
        # сохраняем в БД
        coms.save()
        return HttpResponseRedirect(reverse_lazy('mypage'))
    return render(request, 'mypage.html', {'coms': coms})

урлы:

path('approve/<int:pk>/', approve, name='approve')

тэмплейт:

<a href="{% url 'approve' comment.id %}">Опубликовать</a>

Данные в БД не идут, пыталась еще так реализовать, но не получается

def approve(request, pk):
    # вытаскиваем  неодобренные комменты юзера
    coms = Comment.objects.filter(post__author=request.user, is_accepted=False)
    if request.method == 'POST':
        for x in coms:
            Comment.objects.filter(pk=int(x)).update(is_accepted=True)
            return HttpResponseRedirect(reverse_lazy('posts'))
    return render(request, 'mypage.html', {'coms': coms})

Насколько я понял - вам нужно при нажатии на кнопку отправлять post запрос на сервер и создать комментарий. Это нужно делать не ссылкой, а, например, через js и JQuerry:

<button id="sendCommentButton">Отправить</button>
<script src="https://code.jquery.com/jquery-3.6.1.min.js"></script>
<script src="test.js"></script>
$("#sendCommentButton").on("click", function (_) {
    $.ajax({
        type: "POST",
        url: location.href,
        data: {
            "user_id": "user_id",
            "content": "комментарий"
        },
        headers: {
            'X-Requested-With': 'XMLHttpRequest',
            'X-CSRFToken': "csrfToken"
        },
        success: function (data, _) {
            console.log(data)
        }
    })
})

Или более кустарно, но через html:

<form action="{{ request.path }}" method="post">
    <input type="hidden" value="user_id" name="user_id">
    <input type="hidden" value="комментарий" name="content"> <!-- В таких input можно хранить и передавать в django данные -->
    <button type="submit">Оправить</button>
</form>

И в django:

content = request.POST.get("content")
user_id= request.POST.get("user_id")

Или как в вашем случае:

comment_id = request.POST.get("comment_id")
comment = Comment.objects.get(pk=comment_id, is_accepted=False)
if request.method == 'POST':
   comment.is_accepted = True
   comment.user = request.user
   comment.save()
...
Вернуться на верх