什么是django处理对象投票的方式?

时间:2014-09-13 09:07:30

标签: django

class Survey(models.Model):
  answers = models.ManyToMany('Answer')

class Answer(models.Model):
  answer = models.CharField(max_length=30)
  votes = models.IntegerField(default=0)

我想在html中显示一个答案列表和他们的投票计数,并为每个人提供一个简单的" + 1"将增加votes值的按钮。

如果我不得不重新发明轮子,我会调用一个视图upvote(answer_id)来获取数据库中的答案,增加投票并保存,并且还会在javascript中执行相同操作来更新相应的字段。

在Django中有更好的方法吗?

同样的问题,如果在html中我允许用户发布新答案。

1 个答案:

答案 0 :(得分:0)

您所要做的就是使用JSON响应进行AJAX调用。然后使用javascript更新您的DOM。

这是一个虚拟的例子:

Django方:

import json

def upvote(request, anwser_id):
   # You shall write a better test
   a = Answser.objects.get(pk=anwser_id)
   a.votes += 1
   a.save()
   return HttpResponse(json.dumps({
       'count': a.votes,
       'pk': anwser_id
   }, content_type="application/json")

客户端站点(假设是jQuery) - 无需发布:

$.getJSON('/upvote/' + your_anwser_id + '/')
  .done(function(data) {
    // You've got your response here
    $("YOUR-INPUT-SELECTOR").html(data.count);
  })
  .fail(function(xhr) {
    // Server error
    alert("Error: "+ xhr.responseText);
  });

如果有人在两个查询之间投票,您将拥有正确的回答。我将这种解决方案用于喜欢/不喜欢的评论投票系统。