私は素敵なフォームとそれを扱うための大きな複雑な「追加」機能を作りました。それはこのように始まり...Djangoはフォームを追加してフォームを編集しますか?
def add(req):
if req.method == 'POST':
form = ArticleForm(req.POST)
if form.is_valid():
article = form.save(commit=False)
article.author = req.user
# more processing ...
は今、私は本当にedit()
方法ですべてが機能を複製したくないので、私はedit
がまったく同じテンプレートを使用し、多分ちょうどにid
フィールドを追加することができます考え出しそのフォームはadd
の機能で編集内容を知っていました。しかし、私はadd
FUNCにarticle.id
を設定します。この
- と夫婦の問題がありますか?それは
form.save
の後になければなりません。これは、記事が作成される場所ですが、ユーザーがすべてを編集しない限り、フォームが一意的な制約のために無効であるために到達することさえありません。私はちょうどis_valid
チェックを削除することができますが、form.save
は代わりに失敗します。 - 実際にフォームが無効の場合は、編集機能で動的に追加されたフィールドIが無効になります。
どうすればこの問題に対処できますか?
はい、それは 'ModelForm'です。私は他の理由で 'commit = False'を必要としました。記事は、たくさんのものから構成されています(いくつかのm2m関係を含む)。私は*インスタンス*で作業したいと思っていません。私はこれを試してみましょう。 – mpen
その場合、ビューの代わりにフォームにm2m relations(et al)の保存/検証を入れることをお勧めします。saveメソッドをオーバーライドするか、おそらくフォームセットを調べます。私はそれがあなたと一緒に働いているのコンテキストに依存していると思います... –
素晴らしいと徹底的な例!ありがとう!私はこの質問に対するちょうど解決策以上のことを学びました。 – hobbes3