【发布时间】:2021-03-07 10:01:54
【问题描述】:
(我在 StackOverflow 上搜索了这个错误并尝试了解决方案,但是没有用。)
在我的 Django 项目中,我尝试向我的文章详细信息页面添加一个赞按钮。如果用户喜欢这篇文章,他们点击喜欢按钮并返回相同的文章页面。我在 Youtube 上看到了this video,并通过根据我的项目更改了一些值来编写相同的代码。但我遇到了一个错误,提示字段 'id' 需要一个数字但得到了 ''。
我在 Stackoverflow 上阅读了一些解决方案并尝试删除迁移文件(init.py 除外),然后我写了 python manage.py makemigrations 和 python manage.py migrate. 不幸的是,它没有用。我想分享我的代码,所以也许你可以给我一些解决方案。
模型.py
class Article(models.Model):
author = models.ForeignKey("auth.User", on_delete = models.CASCADE, verbose_name="Kullanıcı")
title = models.CharField(max_length = 50, verbose_name="Başlık")
content = RichTextField()
created_date = models.DateTimeField(auto_now_add = True, verbose_name="Oluşturma Tarihi")
likes = models.ManyToManyField(User, related_name='blog_post')
urls.py
urlpatterns = [
path('dashboard/',views.dashboard, name ="dashboard"),
path('addarticle/',views.addarticle, name ="addarticle"),
path('article/<int:id>',views.detail, name ="detail"),
path('update/<int:id>',views.updateArticle, name ="update"),
path('delete/<int:id>',views.deleteArticle, name ="delete"),
path('',views.articles, name ="articles"),
path('comment/<int:id>',views.addComment, name ="comment"),
path('like/<int:id>',views.LikeView, name ="like_post"),
]
views.py
def LikeView(request, id):
post = get_object_or_404(Article, id=request.POST.get("post_id"))
article.likes.add(request.User)
return HttpResponseRedirect(reverse("detail", args=[str(id)]))
detail.html(在这个html中,我展示了文章的内容和发布者,cmets和likes)
<form action="{% url 'article:like_post' article.id %}" method="POST">
{% csrf_token %}
<button type="submit" name="post_id" value="{{ article_id }}" class="btn btn-primary btn-sm">
<i class="bi bi-hand-thumbs-up"></i> Like
</button>
</form>
您可以在this photo 中查看点赞表,我可以在管理页面中点赞帖子。但显然这不适合用户。
这就是我遇到的error page。
【问题讨论】:
-
不知道您为什么还要发布
"post_id",因为您的表单操作 url 有 id?意思是你不是在你的视图中得到一个变量id。所以你可以写get_object_or_404(Article, id=id)? -
当我写 (Article, id=id) 时,我遇到另一个错误,上面写着“未定义名称‘文章’”
-
我相信威廉已经回答了这个问题。重复有什么用?