Как получить пользователя с помощью POST Ajax вызова в django?

Я пытаюсь реализовать комментарии для товаров на сайте с помощью AJAX, но столкнулся с проблемой, что не могу получить автора комментария в данном случае код:

new_comment.author = request.user

В этом случае я получил эту ошибку: "Значение исключения:

".

Object of type User is not JSON serializable "

".

Но без пользователя я получил параметры от back-end и имею результат 200, как это

author  ""
content "dasda"
created_at  "2021-12-31T07:34:12.766Z"
product 4

Вопрос как можно сериализовать "author = request.user"? Или это можно реализовать только с помощью Django Rest Framework? (У меня нет опыта работы с DRF, но кое-что знаю в теории)

Может кто-нибудь дать совет?

def ajax_receiver(request):
    product = Product.objects.get(id=4)
    is_ajax = request.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest'
    if request.method == 'POST' and is_ajax and request.user.is_authenticated:
        form = UserCommentForm(data=request.POST)
        if form.is_valid():
            new_comment = form.save(commit=False)
            #new_comment.author = request.user
            new_comment.product = product
            new_comment.save()
            comment_info = {
            "author": new_comment.author,
            "content": new_comment.content,
            "created_at": new_comment.created_at,
            "product": product.id,
            }
            return JsonResponse({"comment_info": comment_info}, status=200)
    else:
        return JsonResponse({"success": False}, status=400)

В вашем случае вы пытаетесь преобразовать объект модели User в json. Но JsonResponse для преобразования использует метод json.dumps. И он не может преобразовать модель, класс и сложные объекты в json. Хотя JsonResponse имеет некоторые специальные функции, например, он может конвертировать поля datetime и uuid.

Для вашего случая, я думаю, что создание диктанта автора вручную будет лучше.

  • Просто измените в дикту и это будет выглядеть так.

          comment_info = {
             "author": {
                "name": new_comment.author.name,
                "id": new_comment.author.id
                # -------- so on
             },
             "content": new_comment.content,
             "created_at": new_comment.created_at,
             "product": product.id,
          }
    

Теперь вы можете использовать JsonResponse({"comment_info": comment_info}, status=200) для json ответа.

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