@@ -182,8 +182,37 @@ def add_answer(request):
182182
183183 return render (request , 'qa/detail.html' , {'question' : question })
184184
185- def vote (request , answer_id , question_id , op_code ):
185+ def vote (request , user_id , answer_id , question_id , op_code ):
186+
187+ user_ob = User .objects .get (id = user_id )
188+ user = UserProfile .objects .get (user = user_ob )
186189 answer = Answer .objects .get (pk = answer_id )
190+ question = Question .objects .get (pk = question_id )
191+
192+ answer_list = question .answer_set .order_by ('-votes' )
193+
194+ paginator = Paginator (answer_list , 10 )
195+ page = request .GET .get ('page' )
196+ try :
197+ answers = paginator .page (page )
198+ except PageNotAnInteger :
199+ # If page is not an integer, deliver first page.
200+ answers = paginator .page (1 )
201+ except EmptyPage :
202+ # If page is out of range (e.g. 9999), deliver last page of results.
203+ answers = paginator .page (paginator .num_pages )
204+
205+ if Answer .objects .filter (id = answer_id , user_data = user ).exists ():
206+ return render (request , 'qa/detail.html' , {'question' : question , 'answers' : answers , 'message' :"You cannot vote on your answer!" })
207+
208+ if Voter .objects .filter (answer_id = answer_id , user = user ).exists ():
209+ return render (request , 'qa/detail.html' , {'question' : question , 'answers' : answers , 'message' :"You've already cast vote on this answer!" })
210+
211+ v = Voter ()
212+ v .user = user
213+ v .answer = answer
214+ v .save ()
215+
187216 if op_code == '0' :
188217 answer .votes += 1
189218 u = answer .user_data
@@ -196,8 +225,6 @@ def vote(request, answer_id, question_id, op_code):
196225 u .save ()
197226 answer .save ()
198227
199- question = Question .objects .get (pk = question_id )
200-
201228 answer_list = question .answer_set .order_by ('-votes' )
202229
203230 paginator = Paginator (answer_list , 10 )
0 commit comments