CreateViewやUpdateViewで”Specifying both ‘fields’…”という例が起きた時の対処法

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のどちらかのみ定義しましょう。

スポンサーリンク
スポンサーリンク