デフォルト値( )で空白()としてマークされFooModel
た2つのフィールドを持つモデルがあり、を使用して()を作成し、送信後に保存したいので、私のビューでは次のコードがあります。default=xxx
blank=True
ModelForm
django.forms.ModelForm
FooModel
f = FooForm(request.POST)
if f.is_valid():
f.save()
問題は、このようにして、htmlフォームでレンダリングされないフィールドが、期待どおりにFooFormインスタンスに自動的に継承されないため、データベースから違反例外が発生することです...元のモデルのフィールドを含めるにはどうすればよいですか?これはユーザーに表示されるべきではありませんか?(非表示フィールドとしてレンダリングしたくありません!)
これまでに2つのアプローチを試しましたが、どちらも失敗しました...
FooFormコンストラクターでインスタンスを指定します(
f = FooForm(request.POST, instance=FooModel())
)FooModelのインスタンスを作成し、自動生成された値をフォームのデータに手動で割り当てます。
i = FooModel() f.data.fieldA = i.fieldA f.data.fieldB = i.fieldB
アップデート:
djangoのドキュメントをより正確に読むことで、次のように解決しました。
if f.is_valid():
formModel = f.save(commit=False)
foo = FooModel()
formModel.fieldA = foo.fieldA
formModel.fieldB = foo.fieldB
formModel.save()
しかし、正直なところ、私は満足していません...これらのフィールドの追加を抽象化したいと思います...おそらくカスタムデコレータを使用して...次のようなものです。
f = MissingFieldsDecorator(FooForm(request.POST))
f.save()