2012-12-28 70 views
0

我想要在窗體中渲染error_class。我看到了這個定義,並把它放到一個文件在我的應用程序目錄:嘗試使用自定義基礎ModelForm或自定義error_class時出現Django TypeError

from django.forms.util import ErrorList 
class DivErrorList(ErrorList): 
    def __unicode__(self): 
     return self.as_divs() 
    def as_divs(self): 
     if not self: return u'' 
     return u'<div class="errorlist">%s</div>' % \ 
       ''.join([u'<div class="error">%s</div>' % e for e in self]) 

但是,當我嘗試在我看來,使用它:

from sporty import DivErrorList 
... 
form = LocationForm(request.POST or None, error_class=DivErrorList) 
if form.is_valid(): 

我得到這個錯誤,當提交表單一個錯誤: 類型錯誤:「模塊」對象不是可調用 /usr/local/lib/python2.7/dist-packages/django/forms/forms.py在_clean_fields,線293

這是在form.is_valid()行。如果我不使用error_class,它工作正常(只是不希望的

接下來,我想不是,創建一個使用DivErrorList在我的應用程序目錄中的一個基礎的ModelForm類:

from django.forms import ModelForm 
from sporty import DivErrorList 

class MyModelForm(ModelForm): 
    def __init__(self, *args, **kwargs): 
     kwargs_new = {'error_class': DivErrorList} 
     kwargs_new.update(kwargs) 
     super(MyModelForm, self).__init__(*args, **kwargs_new) 

然後我定義了基於該類我的ModelForm和不再使用的表單創建error_class參數:

from sporty import MyModelForm 
from sporty.models import Location 

class LocationForm(MyModelForm): 
    class Meta: 
     model = Location 

現在,當我嘗試甚至認爲形式(不與任何數據提交的話),我得到此錯誤: TypeError:調用時出錯元類庫模塊。 INIT()採用至多2個參數(3給出) /home/pcm/workspace/sportscaster/sporty/forms.py中,第5行

我在上這兩種損失。有任何想法嗎?我更喜歡後者,因爲我所有的表單都希望用於錯誤報告(我想實際上也將表單渲染爲div,因爲某些點。

+0

順便說一句,該模型只有兩個字段,一個非空的char字段和一個null字段的url字段。 – pcm

回答

0

谷歌搜索,我發現了關於類型錯誤的討論以及元類基地的問題是,我有一個類,MyModelForm,文件MyModelForm.py,然後導入模塊試圖使用它像一個類:

from sporty import MyModelForm 

的解決方案是將MyModelForm類成一個文件modelforms.py和做:

from sporty.modelforms import MyModelForm 

我做了同樣的DivErrorList,將該類放入modelforms.py文件中。

相關問題