无法验证django中的表单

fce*_*uti 0 python django django-forms

我真的不知道还能做什么但是来到这里问你们.继承人的情况:

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)
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

views.py

form = OptionVoteForm(request.POST)
form.is_valid()
>> FALSE!!!!!!!!!!!!!!!
Run Code Online (Sandbox Code Playgroud)

我试图看到表格中的错误,似乎没有人.我在表单的干净方法上放了一些标记,但它们没有被调用.Sames用于OptionChoiceField中的clean方法.

视图中的以下代码

print 'PRINTING ERRORS: ' + str(form.errors)
    for field in form:
        print str(field.label_tag()) + ': ' + str(field.errors)
Run Code Online (Sandbox Code Playgroud)

收益:

 PRINTING ERRORS: 
 <label for="id_option_0">Option</label>: 
Run Code Online (Sandbox Code Playgroud)

请帮助我在这里,我真的被困在这一个.

当我尝试编辑编辑

form = OptionVoteForm(request.POST)
print form
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

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
Run Code Online (Sandbox Code Playgroud)

哦,顺便说一下,我正在使用django 1.3

Wil*_*ian 5

您将覆盖默认的构造函数,因此它接受一个查询集,因此您应该:

qs = OptionVote.objects.all()
form = OptionVoteForm(qs, request.POST)
Run Code Online (Sandbox Code Playgroud)