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中我允许用户发布新答案。
答案 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);
});
如果有人在两个查询之间投票,您将拥有正确的回答。我将这种解决方案用于喜欢/不喜欢的评论投票系统。