首页 > 解决方案 > AttributeError:“str”对象没有属性“likes”

问题描述

我正在尝试获取与帖子相关的点赞数,因此我创建了以下内容:帖子模型:

class Post(models.Model):
    title = models.CharField(max_length=100, unique=True)
    likes = models.IntegerField(default=0)

我已经能够得到否。喜欢,但我正在尝试一种不同的方法,我只是想知道该方法是如何工作的。

以下是我在点赞时尝试添加的视图

def like_post(request):
    user = request.user
    post = request.POST.get('post_id')
    current_likes = post.likes    <------------Error coming from here

    if request.method == 'POST':
        post_obj = Post.objects.get(id=post)
        if user in post_obj.liked.all():
            post_obj.liked.remove(user)
            current_likes = current_likes - 1

        else:
            post_obj.liked.add(user)
            current_likes = current_likes + 1
        post.likes=current_likes
        post.save()

        like, created = Like.objects.get_or_create(user=user, post_id=post)
        if not created:
            if like.value == 'Like':
                like.value = 'Unlike'
            else:
                like.value = 'Like'
        like.save()
        context = {
            'post': post,
        }
    return redirect('blog:post-detail', slug=post_obj.slug)

现在的问题是我收到

AttributeError at /blogs/like
'str' object has no attribute 'likes'

我试图修复它,但我不知道如何。 错误来源在这里突出显示:

current_likes = post.likes

标签: pythondjango

解决方案


那部分没有多大意义:

post = request.POST.get('post_id')
current_likes = post.likes

if request.method == 'POST':
    post_obj = Post.objects.get(id=post)

因为您在访问request.POST之前甚至检查请求方法是否为POST. 将其更改为:

if request.method == 'POST':
    post = request.POST.get('post_id')
    post_obj = Post.objects.get(id=post)
    current_likes = post_obj.likes

推荐阅读