0

デフォルト値( )で空白()としてマークされFooModelた2つのフィールドを持つモデルがあり、を使用して()を作成し、送信後に保存したいので、私のビューでは次のコードがあります。default=xxxblank=TrueModelFormdjango.forms.ModelFormFooModel

f = FooForm(request.POST)

if f.is_valid():
  f.save()

問題は、このようにして、htmlフォームでレンダリングされないフィールドが、期待どおりにFooFormインスタンスに自動的に継承されないため、データベースから違反例外が発生することです...元のモデルのフィールドを含めるにはどうすればよいですか?これはユーザーに表示されるべきではありませんか?(非表示フィールドとしてレンダリングしたくありません!)

これまでに2つのアプローチを試しましたが、どちらも失敗しました...

  1. FooFormコンストラクターでインスタンスを指定します(f = FooForm(request.POST, instance=FooModel())

  2. 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()
4

2 に答える 2

1

また、ここに記載されているアプローチを試してくださいhttps://docs.djangoproject.com/en/1.4/topics/forms/modelforms/#using-a-subset-of-fields-on-the-form

于 2013-02-04T22:44:15.957 に答える
0

ユーザーに表示してはならない元のモデルのフィールドを含めるにはどうすればよいですか?

あなたの質問のこの部分に答える

class FooForm(ModelForm):
    class Meta:
        model = FooModel
        exclude = ('not_displayed_field',)
于 2013-02-04T22:00:04.803 に答える