2011-09-12 6 views
3

に基づいてDjangoのフォーム私はこのようなDjangoアプリケーションに2つのモデルを持っている場合:私はあなたが両方AuthorBook同時に追加できます単一のフォームを作成するにはどうすればよい複数のモデル

class Author(models.Model): 
    name = models.CharField(max_length=100) 

class Book(models.Model): 
    author = models.ForeignKey(Author) 
    title = models.CharField(max_length=100) 

。著者がシステムに存在する場合は、単純に書籍フォームを表示して著者にリンクすることができますが、ユーザーが書籍と著者を同時に作成できるようにする必要があります。

どうすればいいですか?

ありがとうございました。

+0

ユーザーに、作成者を選択するか、新しい作成者を選択し、Ajax呼び出しを使用して新規作成者を作成し、新しく作成された作成者を含むようにリストを変更するオプションを与えることができます。興味深いと聞こえたら、もっと情報を伝えることができます。 –

+0

私は同じような実装を考えましたが、私は可能な限りジャンゴー語として保存したいと思います。 AJAXメソッドでは、私はDjangoの一般的なCRUDビューを使用できるとは思わない。 –

+0

@MridangAgarwalla ...あなたはこれを最終的にどのように実装したのか覚えていますか?私は管理ページで1つのmodelformに2つのモデルを追加する必要がある同様の問題があります。あなたの解決策が助けになるかもしれません。ありがとう。 – ac11

答えて

4

作成者がシステムに存在するかどうかを確認するカスタムフォームを作成できます。存在しない場合は、指定された名前で新規作成します。

class CustomForm(forms.ModelForm): 
    author = forms.CharField() 

    def save(self, commit=True): 
     author, created = Author.objects.get_or_create(name=self.cleaned_data['author']) 

     instance = super(CustomForm,self).save(commit=commit) 
     instance.author = author 
     if commit: 
      instance.save() 
     return instance 

    class Meta: 
     model=Book 

このコードが機能しているかどうかはわかりませんが、私の考えを説明できると思います。

+0

model = Book – szaman

+0

ドミトリーでメタクラスを追加する。このソリューションは、フィールドが1つしかない私のサンプルの場合にうまく機能します。私は例としてそれを使用した。私の作成者モデルに多くのフィールドがある場合は、それぞれのフィールドをModelFormに記述する必要があります。私は、すべてのフィールドを再宣言する必要があるため、2つのフォームに基づいてModelFormを直接作成する方法を探していました。どうも。 –