尝试使用自定义基础ModelForm或自定义error_class时的Django TypeError

时间:2012-12-28 19:21:53

标签: django-models python-2.7 django-forms

我想在表单中进行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也是如此。

1 个答案:

答案 0 :(得分:0)

谷歌搜索,我发现了关于类型错误和元类基础的讨论。问题是我在一个文件MyModelForm.py中有一个类MyModelForm,然后导入模块试图像类一样使用它:

from sporty import MyModelForm

解决方案是将MyModelForm类放入文件modelforms.py并执行:

from sporty.modelforms import MyModelForm

我对DivErrorList做了同样的事情,将类放在modelforms.py文件中。