2011-05-13 6 views
0

나는 무엇을 해야할지 모르지만 여기에 와서 물어보십시오. Heres는 상황 :장고의 양식 유효성 검사 문제가

models.py는

class Vote(models.Model): 
    """ Generic vote model """ 

    user = models.ForeignKey(User) 
    question = models.ForeignKey(Question) 
    created = models.DateTimeField(auto_now_add=True) 

    objects = models.Manager() 
    cache = CacheVoteManager() 

    class Meta: 
     abstract = True 

    def __unicode__(self): 
     return '%s : %s' % (self.user.username, self.question.question) 

class OptionVote(Vote): 
    option = models.ForeignKey(Option) 

forms.py

class OptionChoiceField(forms.ModelChoiceField): 
    """ Custom model choice field for options """ 
    widget = forms.RadioSelect(attrs={'class': 'c-opt'}) 
    def label_from_instance(self, obj): 
     return mark_safe(
      '<span class="c-opt-img">%s</span><span class="c-opt-name">%s</span>' 
      % (obj.media_content.draw_create_widget() , obj.name)) 

class OptionVoteForm(ModelForm): 
    """ Form to vote in a option-based question """ 
    option = OptionChoiceField(queryset=OptionVote.objects.none(), 
          empty_label=None) 
    class Meta: 
     model = OptionVote 
     exclude = ['user', 'question'] 
    def __init__(self, options=None, *args, **kwargs): 
     super(OptionVoteForm, self).__init__(*args, **kwargs) 
     if options: 
      self.fields['option'].queryset = options 

views.py

form = OptionVoteForm(request.POST) 
form.is_valid() 
>> FALSE!!!!!!!!!!!!!!! 

나는 형태와 거기에 오류를보고 시도 아무도 없어 보인다. 나는 폼의 clean 메서드에 플래그를 두 었으며 호출되지 않습니다. Sames는 OptionChoiceField의 메소드를 깨끗하게 처리합니다.

뷰에서 다음 코드

print 'PRINTING ERRORS: ' + str(form.errors) 
    for field in form: 
     print str(field.label_tag()) + ': ' + str(field.errors) 

반환 :

PRINTING ERRORS: 
<label for="id_option_0">Option</label>: 

가 여기 나 좀 도와주십시오은 reaaally이 하나 붙어 미안.

EDIT 나는 다음과 같은 오류 얻을

form = OptionVoteForm(request.POST) 
print form 

할 때 : BTW

Exception Type: AttributeError 
Exception Value: 'QueryDict' object has no attribute 'all' 
ExceptionLocation: /opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/forms/models.py in __iter__, line 882 

오,와, 미안 장고 1.3

+0

form.is_valid()를 수행 한 후에 form.errors를 사용해 보셨습니까? –

+1

예, 'PRINTING ERRORS'문을 확인하십시오. form.is_valid() : ... else : [여기] – fceruti

+0

'form = OptionVoteForm (request.POST) '뒤에'print form'을하면 어떤 결과가 나올까요? –

답변

5

를 사용하여 당신 ' queryset을 받아들이도록 기본 constuctor를 다시 정의하므로 다음을 수행해야합니다.

qs = OptionVote.objects.all() 
form = OptionVoteForm(qs, request.POST) 
+0

이것이 승자가 될 수 있습니다 생각합니다 –

+0

sooooo 고맙습니다! 당신은 적어도 한 사람을 행복하게 만들었습니다 :) – fceruti

+0

@ Bryce Siedschlaw 좋은 콜! – fceruti