1

2つの基本的なクラスがあり、一方が他方に対して多対多の関係にあるとします。

class Foo(models.Model):
    abc = models.TextField()
    test = models.ManyToManyField(Bar)

class Bar(models.Model):
    zyx = models.TextField()

次に、Foo用のDjangoフォームを作成します。

class FooForm(forms.ModelForm):
    class Meta:
        model = Foo
        fields = ["abc", "test"]

Fooこれにより、新しいの変数の値を入力するためのTextAreaと、abcそれを1つ以上のBarオブジェクトにリンクするためのリストボックスを含むフォームが作成されます。この特定のフォームに対して私がしたいのは、Barオブジェクトのリストボックスの代わりに、同時に1つ(そして1つだけ)の新しいものを作成できるようにすることです(つまり、 'sのBar値に対して2番目のTextAreaを表示します) 。次に、その新しいものを新しいものにリンクします。ManyToManyの関係は、編集の後半で発生しますが、作成時には、1つを新しいものに正確に関連付けたいと思います。BarzyxBarFooBarFoo

フォームをPOSTすることでこれを一度に行うことは可能ですか、それとも実際にBar最初のIDを作成し、新しいIDを取得し、新しいIDをそれにリンクするためにJavaScriptとAJAXを使用する必要がありFooますか?

4

1 に答える 1

1

それ可能ですがModelForm、あなたのためにそれを行うかどうかはわかりません.


ただし、自分で簡単に実行できます。

ユーザーが入力するフォームを設定します。

  • ユーザーが入力できるようにするフォームを作成しますabc(それは の可能性がありますModelForm)
  • ユーザーが任意の数を入力して関連するインスタンスを作成できるフォームからフォームセットを作成します。(ここでも、formsetは OK です)zyxBarModelForm

データを処理するときPOSTは、次のようにします。

  1. フォームとフォームセットが有効であることを検証する
  2. 新しいインスタンスを挿入します
  3. Bar新しいインスタンスを newFooBarManyToMany 関係に追加します

ModelForm.save小さなヒント:インスタンスを返すことを覚えておいてください!

于 2012-12-05T14:46:56.230 に答える