【发布时间】:2021-12-31 07:39:38
【问题描述】:
我正在尝试使用 AJAX 为现场产品实现 cmets,但遇到的问题是在这种代码案例中我无法收到作者的评论:
new_comment.author = request.user
在这种情况下我得到了这个错误:“异常值:
User 类型的对象不是 JSON 可序列化的"
但是在没有用户的情况下,我从后端获取了参数,结果为 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)
谢谢大家的推荐! Finnaly 我用 Django Rest Framework 做了最后一个版本的代码,希望它能帮助遇到同样问题的人。不要忘记在 serializers.py 中创建您需要的序列化程序并导入 DRF 需要的模块:
from .serializers import CommentSerializer
from rest_framework.response import Response
from rest_framework.decorators import api_view
@api_view(['POST'])
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()
serializer = CommentSerializer(new_comment, many=False)
return Response(serializer.data, template_name='ajax_test.html')
else:
return JsonResponse({"success": False}, status=400)
【问题讨论】:
标签: django ajax serialization django-views django-forms