我如何在Django类ListView中添加“喜欢”按钮

时间:2020-02-05 16:45:14

标签: django listview

我正在努力尝试在网站的帖子应用中添加“赞”按钮,但是由于我想将其添加到包含其余帖子条目的ListView中,每个人都可以选择评论我已经添加了一个Formixin来这样做,所以,现在我不能为like按钮添加另一种形式,因为这将意味着需要两个帖子....所以我没有找到明确的解决方案...我在这里和那里都已经阅读有关使用AJAX或Json技术的信息,但由于即时消息被卡在其中,因此有人提供任何提示吗?

2 个答案:

答案 0 :(得分:0)

虽然使用AJAX(JavaScript XHR请求)是正确的方法,所以仅单击“赞”按钮时就不需要刷新页面,但是无需AJAX即可完成。

HTML

在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 %}

因此,基本上,您要多次重复使用表单,更改“值”属性以匹配帖子。

Django Form

在视图中添加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