2016-10-28 6 views
0

フォームセット内のすべての新しいフォームのための多対多の関係を記入(簡体字):ジャンゴ:私はこれらの3つのモデルを使用してい

class Model1(models.Model): 
    field1 = models.CharField(max_length=25) 

class Model2(models.Model): 
    field1 = models.CharField(max_length=25) 

class Model3(models.Model): 
    model1 = models.ForeignKey(Model1) 
    model2 = models.ForeingKey(Model2) 

私はMODEL1のフォームや仕事Model2sためのフォームセットが、持っています問題は、formset内のすべてのModel2に対して、Model2とModel1を接続するModel3が必要であることです。

Model3を追加して、FormsetのModel2ごとに記入する方法を教えてください。
インラインフォームセットまたはモデルフォームセットを使用して解決策を見つけようとしましたが、まだ実際には理解できません。私はそれが正しい方向であるかどうかも分かりません。

私は正しい方向に私を指し示すものを探しています。

if model_one_form.is_valid() and model_two_formset.is_valid(): 
    obj_one = model_one_form.save() 
    for model_two_form in model_two_formset: 
     obj_two = model_two_form.save() 
     obj_three = Model3.objects.create(model1=obj_one, model2=obj_two) 

この単純な簡単なのManyToManyFieldを使用して、より良い行うことができる何かと思われる、またはあなたの場合:上記の私の質問を想定し

+1

Model3はModel2のみをModel1に接続するため、ユーザーデータは必要ありません。それは事実ですか?その場合、フォームのセーブロジックでこれを実現することができます。送信されたformset内のすべてのModel2インスタンスが、送信されたModel1インスタンスへのリンクを必要とするかどうかによって異なります。 – nimasmi

答えて

1

は、あなたのビューのPOSTハンドリング部分で、右のラインに沿っていますModel3へのアクセスが必要ですが、同じですが、引数はthroughです。 https://docs.djangoproject.com/en/1.10/ref/models/fields/#django.db.models.ManyToManyField.throughを参照してくださいもちろん、あなたの質問はあなたの質問に示したより複雑かもしれません。

+0

それは私が必要としていたものです。私はまだDjangoを学んでいて、モデルの作成機能があることに気づいていません。ありがとうございました! ManyToManyフィールドに関しては、私はDjangoの組み込みのものがバックグラウンドで何をしているのかを知りたかったので、今は自分でやっています。私はおそらく、魔法のように感じることがなく、ManytoManyフィールドを行うもっと簡単な方法のように感じると、組み込みのものを使用します。 – BarbarianBunny

+0

それは賢明なアプローチです。 'obj_one = Model1.objects.create(foo = bar)'を 'obj_one = Model1(foo = bar)のショートカットとして考えることができます。 obj_one.save() ' – nimasmi

関連する問題