現在、Django 1.2 から 1.4 へのアップグレードを試みていますが、Django がアップグレードでフォームの検証をより厳密にすることを決定したかのように、フォームにフィールドがないことを訴える多数の "Caught FieldError" メッセージに遭遇しています。
1.3 で追加されたフィールド検証コードの新しいブロックがあり、これがエラーの原因になっているようです。ブロックを削除すると、すべて正常に機能します。この余分な検証を削除すると、深刻な影響はありますか?
削除したコードは次のとおりです。
opts.exclude, opts.widgets, formfield_callback)
# make sure opts.fields doesn't specify an invalid field
none_model_fields = [k for k, v in fields.iteritems() if not v]
missing_fields = set(none_model_fields) - \
set(declared_fields.keys())
if missing_fields:
message = 'Unknown field(s) (%s) specified for %s'
message = message % (', '.join(missing_fields),
opts.model.__name__)
raise FieldError(message)
これは django/forms/models.py の 207 行目あたりです。
どうやらエラーは Unknown field であり、FieldError ではなく、申し訳ありません。