CreateViewやUpdateViewを使うと次の様な2つの例外が発生する事があります。
ImproperlyConfigured: Specifying both ‘fields’ and ‘form_class’ is not permitted.
ImproperlyConfigured: Using ModelFormMixin (base class of <classname>) without the ‘fields’ attribute is prohibited.
これは、fields変数と、form_class変数の扱いを間違えると発生します。
今回はこの例外の発生原因と対処法を紹介します。
例外の発生原因
以下のUserCreateViewクラスはfieldsとform_classを定義していますが、両方を同時に定義することはできません。
from django.contrib.auth.models import User
from django.views.generic.edit import CreateView
from .forms import UserCreationForm
class UserCreateView(CreateView):
model = User
fields = ['username']
form_class = UserCreationForm
この場合例外が発生します。
ImproperlyConfigured: Specifying both 'fields' and 'form_class' is not permitted.
(翻訳)
'fields' と 'form_class' を両方指定することは許可されていません。
fields属性はModelFormクラス内のMetaクラスのfields属性と同じ様に扱われます。
別の方法でフォームクラスを定義しない場合は、fields属性は必須です。そうでない場合、上記の様なImproperlyConfigured例外が発生します。
ちなみに、fieldsもform_classも定義していない場合は次の様なImproperlyConfigured例外が発生します。
ImproperlyConfigured: Using ModelFormMixin (base class of <classname>) without the 'fields' attribute is prohibited.
(翻訳)
'fields'属性なしでModelFormMixin(<classname>の基底クラス)を使用することは禁止されています。
対処法
fieldsまたはform_classのどちらかのみ定義しましょう。
コメントを残す