TypeError:类型方法的对象不可JSON序列化

问题描述 投票:0回答:1

首先,我是编码的新手。我认为问题很简单,但是我尝试了三天

当我单击“赞”按钮时,我在控制台中收到内部服务器错误。返回视图功能的主要问题。如何在HttpResponse中返回值,以便我可以在javascripts中访问

控制台错误:

jquery.js:9837 POST http://127.0.0.1:8000/blogs/post/like/ 500 (Internal Server Error)

意见:

class PostLikeView(generic.View):
    def post(self, request, *args, **kwargs):
        user = request.user
        post_id = request.POST['post_id']
        post = Post.objects.get(id=post_id)
        user_liked, created = PostLike.objects.get_or_create(post=post, user=user)
        if not created:
            PostLike.objects.filter(post=post).filter(user=user).delete()
            total = post.like.count
            data = {'total-like':total,'user_liked':False}
        else :
            total = post.like.count
            data = {'total-like':total,'user_liked':True}
        return HttpResponse(json.dumps(data), content_type='application/json')

javaScripts:

<script type="text/javascript"> 
    $('.likebutton').click(function(){ 
    var id; 
    id = $(this).attr("data-catid"); 
    $.ajax( 
    { 
        type:"POST", 
        url: "blogs/post/like/", 
        data:{ csrfmiddlewaretoken: "{{ csrf_token }}",
                 post_id: id 
             },
        dataType: 'json', 
      });
      //(function(data){
        //data = JSON.parse(data)
        //console.log(data)
     // });
       });
    </script>  

错误进入终端:

Internal Server Error: /blogs/post/like/
Traceback (most recent call last):
  File "C:\publish\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\publish\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\publish\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\publish\lib\site-packages\django\views\generic\base.py", line 71, in view
    return self.dispatch(request, *args, **kwargs)
  File "C:\publish\lib\site-packages\django\views\generic\base.py", line 97, in dispatch
    return handler(request, *args, **kwargs)
  File "C:\publish\studentcollegeworld\blogs\views.py", line 114, in post
    return HttpResponse(json.dumps(data), content_type='application/json')
  File "c:\users\abc\appdata\local\programs\python\python38\lib\json\__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
  File "c:\users\abc\appdata\local\programs\python\python38\lib\json\encoder.py", line 199, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "c:\users\abc\appdata\local\programs\python\python38\lib\json\encoder.py", line 257, in iterencode
    return _iterencode(o, 0)
  File "c:\users\abc\appdata\local\programs\python\python38\lib\json\encoder.py", line 179, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type method is not JSON serializable
[25/May/2020 17:14:55] "POST /blogs/post/like/ HTTP/1.1" 500 20260
javascript django python-3.x ajax httpresponse
1个回答
0
投票

尝试在两个地方的post.like.count之后加上括号。在if和else块中应为total = post.like.count()

© www.soinside.com 2019 - 2024. All rights reserved.