2014-09-13 34 views
0
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的值。什麼是處理對象投票的Django方式?

如果我不得不重新發明輪子,我會調用一個視圖upvote(answer_id),它將獲取數據庫中的答案,增加投票並保存,並且還會在javascript中執行相同的操作來更新相應的字段。

在Django中有更好的方法嗎?

同樣的問題,如果在HTML中,我允許用戶發佈一個新的答案。

+0

你想做什麼?爲服務器端和客戶端全部更新一次投票?你使用AJAX調用還是使用http請求? – 2014-09-13 09:17:53

+0

ajax調用,更新服務器和客戶端的投票 – Thomas 2014-09-13 09:23:28

回答

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); 
    }); 

如果有人兩次查詢之間的票,你會得到正確的答案。我使用這種解決方案來處理喜歡/不喜歡的評論投票系統。

相關問題