我正在努力尝试在网站的帖子应用中添加“赞”按钮,但是由于我想将其添加到包含其余帖子条目的ListView中,每个人都可以选择评论我已经添加了一个Formixin来这样做,所以,现在我不能为like按钮添加另一种形式,因为这将意味着需要两个帖子....所以我没有找到明确的解决方案...我在这里和那里都已经阅读有关使用AJAX或Json技术的信息,但由于即时消息被卡在其中,因此有人提供任何提示吗?
答案 0 :(得分:0)
虽然使用AJAX(JavaScript XHR请求)是正确的方法,所以仅单击“赞”按钮时就不需要刷新页面,但是无需AJAX即可完成。
在HTML方面,您可以有多种形式(<form>
),每一种形式一个,其中有一个隐藏的输入字段,即文章的ID。您已经在HTML模板中对此进行了明确设置,例如
{% for post in post_list %}
<h3>{{ post.title }}</h3>
<p>{{ post.summary }}</p>
<form method="post">
{% csrf_token %}
<input type="hidden" value="{{ post.id }}" name="{{ form.id.html_name }}">
<input type="submit">Like</input>
</form>
{% endfor %}
因此,基本上,您要多次重复使用表单,更改“值”属性以匹配帖子。
在视图中添加FormMixin
是正确的步骤,只需将form_class
应用于自定义LikeForm
,仅包含一个名为id
的IntegerField字段即可。
通过添加FormMixin
,您将获得form_valid()
方法,您将要重写该方法以保存类似内容:
def form_valid(self, form):
id = form.cleaned_data['id']
try:
post = Post.objects.get(id=id)
except Post.DoesNotExist:
raise Http404
post.likes.add(self.request.user) # assuming likes is a m2m relation to user
return redirect('post_list') # this list view
答案 1 :(得分:0)
希望我没有那么晚,我在尝试在我的网站上实现相同的功能时遇到了类似的挑战。 我开始意识到每个按钮 id 应该是唯一的(如果是博客,最好是帖子 id),但类可以相同。 我能够解决它。这是我最近在媒体上写的一篇关于我遵循的步骤的文章,因此您可以查看它here