2011-05-13 45 views
0

我真的不知道還能做什麼,只是來這裏問問你們。繼承人的情況:在django中驗證表單的問題

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!!!!!!!!!!!!!!! 

我試圖看到的形式和存在的錯誤似乎沒有人。我在窗體的乾淨方法上放了一些標誌,並且不會被調用。 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>: 

請幫我在這裏,i'm reaaally停留在這一個。

編輯 當我嘗試做

form = OptionVoteForm(request.POST) 
print form 

我得到以下錯誤:

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 

哦,順便說一句和,I'm使用Django 1.3

+0

您是否在form.is_valid()之後嘗試過使用form.errors? – 2011-05-13 20:06:30

+1

是的,請檢查'PRINTING ERRORS'聲明。這就是所謂的如果form.is_valid():... else:[here] – fceruti 2011-05-13 20:08:47

+0

如果您在'form = OptionVoteForm(request.POST)'後面執行'print form',您會看到什麼樣的輸出' – 2011-05-13 20:25:27

回答

5

你」重寫默認構造函數以接受查詢集,因此您應該這樣做:

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

我認爲這可能是贏家 – 2011-05-13 20:37:05

+0

謝謝sooooo多!!!你至少讓一個人開心:) – fceruti 2011-05-13 20:38:40

+0

@Bryce Siedschlaw良好的呼喚! – fceruti 2011-05-13 20:39:26