2014-09-13 3 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로 표시하고 각각에 대해 votes 값이 증가하는 간단한 '+1'버튼이 있어야합니다.개체에서 투표를 처리하는 장고 방법은 무엇입니까?

휠을 재발 명해야한다면 데이터베이스에서 응답을 가져오고 투표를 증가시키고 저장하는보기 upvote(answer_id)을 호출하고 해당 필드를 업데이트하기 위해 javascript에서도 동일한 작업을 수행합니다.

장고에서 더 좋은 방법이 있습니까?

동일한 질문은 html에서 사용자가 새로운 대답을 올릴 수 있도록 허용합니다.

+0

무엇을 하시겠습니까? 서버 쪽과 클라이언트 쪽 모두에 대해 한 번 투표를 업데이트 하시겠습니까? AJAX 호출이나 http 요청을 사용합니까? –

+0

ajax 호출, 서버 및 클라이언트에 대한 투표 업데이트 – Thomas

답변

0

JSON 응답으로 AJAX 호출 만하면됩니다. 그런 다음 자바 스크립트로 DOM을 업데이트하십시오.

이 더미 예입니다

장고 측 :

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

을 누군가가 두 개의 쿼리 사이에 투표하면, 너는 정확한 anwser을 가질 것이다. 나는 같은/싫어하는 의견 투표 시스템에 대한 그런 종류의 솔루션을 사용합니다.

관련 문제