首页 > 解决方案 > 在Django中单击like按钮时出错

问题描述

我正在尝试向 Django 中的博客文章添加一个赞按钮,但每次我尝试单击赞按钮时都会看到此错误。但是如果我打开管理页面然后返回该站点,它可以正常工作,我不知道为什么会这样。请问有什么帮助吗?

我得到的错误:

TypeError at /like/45 Field 'id' expected a number but got <SimpleLazyObject: <django.contrib.auth.models.AnonymousUser object at 0x000001BF06424F10>>

查看代码:

def LikeView(request,pk):
    post = get_object_or_404(Post, id=request.POST.get('post_id'))
    post.likes.add(request.user) 

型号代码:

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    likes= models.ManyToManyField(User,related_name='blog_post')

    def total_likes(self):
        return self.likes.count()

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('post-detail',kwargs={'pk':self.pk})

网址:

urlpatterns = [
    path('', PostListView.as_view(), name='blog-home'),
    path('user/<str:username>', UserPostListView.as_view(), name='user-posts'),
    path('post/<int:pk>/', PostDetailView.as_view(), name='post-detail'),
    path('post/new/', PostCreateView.as_view(), name='post-create'),
    path('post/<int:pk>/update/', PostUpdateView.as_view(), name='post-update'),
    path('post/<int:pk>/delete/', PostDeleteView.as_view(), name='post-delete'),
    path('about/', views.About, name='blog-about'),
    path('like/<int:pk>',LikeView,name='like_post'),
]

模板中的按钮:

<form action="{% url 'like_post' post.pk %}" , method="POST">
    {% csrf_token %}
    <button
      type="submit"
      ,
      name="post_id"
      ,
      value="{{ post.id }}"
      ,
      class="btn btn-primary btn-ms"
    >
      Like
    </button>

标签: pythondjangodjango-viewsdjango-templates

解决方案


推荐阅读