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, line 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 に答える