Функция одобрения комментариев
Я абсолютный новичок в программировании. Пытаюсь написать функцию одобрения комментария, чтобы после принятия, он отображался под постом. Неодобренные комменты отображаются на отдельной странице пользователям чьим постам они были написаны.
функция:
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()
...