0

我想在表单中进行 error_class 渲染。我看到了这个定义并将其放入我的应用程序目录中的一个文件中:

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' object is not callable /usr/local/lib/python2.7/dist-packages/django/forms/forms.py in _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。

4

1 回答 1

0

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

from sporty import MyModelForm

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

from sporty.modelforms import MyModelForm

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

于 2012-12-29T16:16:28.200 回答