2015-03-25 5 views
0

Я хочу увеличить кандидат заработать значение, если он получил право голоса. Поэтому я пишу эту часть в result_view, но это не работает.В представлении Django, как я могу изменить значение члена класса?

Вот мои взгляды.


from django.shortcuts import render_to_response 

from election.models import * 

# /candidate/ view 
def candidate_view(request): 
    if request.method == 'GET': 
     c = Candidate.objects.all() 
     return render_to_response('candidate.html', {'candidates': c}) 

# /candidate/result/ view 
def result_view(request): 
    if request.method == 'POST': 
     c = Candidate.objects.all() 
     ec = Candidate.objects.filter(num=request.POST.get('choice')) 

     ec[0].earn += 1 
     ec[0].name = 'semi kwon' 
     ec[0].save() 

     #return render_to_response('result.html', {'candidates': ec}) 
     return render_to_response('result.html', {'candidates': c}) 

И вот моя модель.


from django.db import models 


class Candidate(models.Model): 

    num = models.IntegerField() 
    name = models.TextField() 
    major = models.TextField() 
    grade = models.IntegerField() 
    earn = models.IntegerField(default = 0, blank=True, editable=True) 

    def __unicode__(self): 
     return "%d : %s"%(self.num, self.name,) 

Как я могу решить эту проблему?

+0

Добро пожаловать в StackOverflow! Я редактировал отчет вашего примера кода для лучшей читаемости. Обращаем внимание, что блок кода должен начинаться с 4-х пробелов. Он также будет полезен, если вы можете предоставить фрагмент вашего шаблона. – cezar

+0

У вас также есть форма (что-то вроде '' CandidateForm (ModelForm) '')? В вашем '' result_view'' вы обрабатываете ввод пользователя, который должен быть выполнен в форме, но для этого вы не указали требуемый код. – cezar

+0

@cezar Спасибо за теплый прием:> !! С этого момента я буду иметь в виду. –

ответ

0

Вы проверили базу данных после обновления вашего кандидата?

Поскольку вы получаете кандидатов (c), прежде чем обновлять кандидата (ec), возможно, вы обновили кандидата, но передали старый шаблон шаблону.

Было бы лучше использовать форму, но сохранить свою логику, попробуйте следующее:

def result_view(request): 
    # csrf update etc 
    # your request.method GET here 
    # ... 
    if request.method == 'POST': 
     # dictionary with vars that will be passed to the view 
     params = {} 

     # check if there is a candidate with this num 
     # before you do anything with it 
     # you could do a try/except instead 
     if Candidate.objects.filter(num=request.POST.get('choice')).count(): 
      # Getting candidate 
      candidate = Candidate.objects.get(num=request.POST.get('choice')) 
      # Updating candidate 
      candidate.earn += 1 
      # I don't know what this is, but let's keep it 
      candidate.name = 'semi known' 
      # Saving candidate 
      candidate.save() 

     else: 
      # returning error, candidate not found 
      params['error'] = "No candidate with this num" 

     # updating candidates list 
     params['candidates'] = Candidate.objects.all() 

     # rendering view 
     return render_to_response('result.html', params) 
+0

фактически, semi kwon - мое имя: D ... kkk. Я просто забыл удалить это. –

+0

ahaha ... так, это работает? – brunofitas

+0

Да, это работает! Огромное спасибо!! –

Смежные вопросы