【问题标题】:Handling votes through forms通过表格处理投票
【发布时间】:2018-01-05 07:43:25
【问题描述】:

我安装了django-vote,它有一个简单的 API:

review = ArticleReview.objects.get(pk=1)

# Up vote to the object
review.votes.up(user_id)

# Down vote to the object
review.votes.down(user_id)

我有一个包含多条评论的汽车页面,我想投票。我试过了:

<form action="{% url 'reviews:review-vote' review.id %}" method="GET">
    <button type="submit" name="vote-up"></button>
    <button type="submit" name="vote-down"></button>
</form>

网址:

url(r'^(?P<review_id>\d+)/vote/$', views.review_vote, name="review-vote"),

查看:

def review_vote(request, review_id):
    if request.GET.get("vote-up"):
        review = Review.objects.get(id=review_id)
        review.votes.up(request.user.id)
    return redirect("car", {"make": review.car.make, "years": review.car.years})

这不会执行投票,也不会重定向到 Car 页面。我想在我的模板中实现投票 API,尽可能不重新加载页面。

欢迎和非常感谢任何建议或反馈。

谢谢。

【问题讨论】:

  • 您是否在后端获得值"vote-up"
  • 是的,它可以在 shell 中工作。

标签: django forms function django-templates voting


【解决方案1】:

您可以检查vote-upvote-down中的密钥是否在request.GET

<form action="{% url 'reviews:review-vote' review.id %}" method="GET">
    <button type="submit" name="vote-up"></button>
    <button type="submit" name="vote-down"></button>
</form>

在视图中试试这个。

def review_vote(request, review_id):
    if "vote-up" in request.GET:
        review = Review.objects.get(id=review_id)
        review.votes.up(request.user.id)
    return redirect("car", {"make": review.car.make, "years": review.car.years})

【讨论】:

  • 找出问题所在:我的 URL 有重叠,所以我的表单的 action 属性将我引导到另一个视图函数。这就是投票没有登记的原因。感谢您的回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-26
  • 2015-09-15
  • 2014-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
相关资源
最近更新 更多