我想在表单中进行error_class渲染。我看到了这个定义并将其放入我的app目录中的文件中:
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():
我在提交错误表单时遇到此错误: TypeError:'module'对象不可调用 /usr/local/lib/python2.7/dist-packages/django/forms/forms.py在_clean_fields,第293行。
这是在form.is_valid()行。如果我不使用error_class,它可以正常工作(只有没有所需的。
接下来,我尝试创建一个使用我的app目录中的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 in,第5行
我对这两个都感到茫然。有任何想法吗?我更喜欢后者,因为我的所有表单都希望用于错误报告(我想将表单实际渲染为div也是如此。
答案 0 :(得分:0)
谷歌搜索,我发现了关于类型错误和元类基础的讨论。问题是我在一个文件MyModelForm.py中有一个类MyModelForm,然后导入模块试图像类一样使用它:
from sporty import MyModelForm
解决方案是将MyModelForm类放入文件modelforms.py并执行:
from sporty.modelforms import MyModelForm
我对DivErrorList做了同样的事情,将类放在modelforms.py文件中。