私はドキュメントを見ていて、おそらくインラインフォームセットが答えになるだろうと思いました。しかし、私は完全にはわかりません。
通常、ModelFormを作成するときは常に、関連するモデルにのみバインドされます。しかし、フォーム内の2つのモデルを編集したい場合はどうでしょうか。
簡単に言うと、クラスを編集し、ドロップダウンからクラスconversation
を選択するときDeal
に、選択した取引クラスのステータスも変更できるようにしたいと思います(ただし、deal_nameは変更できません)。すべて同じフォーム内。Djangoはそれを許可しますか?
class Deal(models.Model):
deal_name = models.CharField()
status = models.ForeignKey(DealStatus)
class Conversation(models.Model):
subject = models.CharField()
deal = models.ForeignKey(Deal, blank=True, null=True)
更新:
インラインフォームセットが答えであるかどうかわからなかった理由は、次の動作です。
意見:
call = get_object_or_404(contact.conversation_set.all(), pk=call_id)
ConversationFormSet = inlineformset_factory(Deal, Conversation)
fset = ConversationFormSet(instance=call)
variables = RequestContext(request, {'formset':fset})
return render_to_response('conversation.html', variables)
レンプレート
{{ formset }}
私が得ている結果は、私が期待したものではありません。私は3つの形式の会話クラスを取得しています。最初のクラスが入力されています(編集とインスタンスの受け渡しによる)。ただし、Deal
ドロップダウンメニューはまったく表示されません。なんで?