2016-03-31 13 views
0

私は3つのモデル:ブック、言語とオプションを持っています。マスターとマルガリータ、ローズの名前などの事前定義されたセットと言語(英語、ドイツ語、フランス語など)があります。各ブックインスタンスには、使用可能な言語の事前定義されたサブセットがあります(ManyToMany関係)。オプションモデルには、ブックフィールド(ForeignKeyとして)と言語フィールド(ManyToMany)が含まれます。私は、ユーザーが任意の本を選択できるようにフォームを構築し、このブックに関連するサブセットのみを表示するように言語クエリーセットを動的にフィルタリングする(選択後)。それはDjangoで可能ですか?Django - 別のフィールドに基づくフォームフォームフィールドのクエリーセット

関連モデル:

class Book (models.Model): 
    title = models.CharField (max_length = 128) 
    languages = models.ManyToManyField (Language, related_name = 'available_languages') 

class Language (models.Model): 
    name = models.CharField (max_length=64) 
    abbreviation = models.CharField (max_length=4) 

class Options (models.Model): 
    book = models.ForeignKey (Book, help_text = 'Text', null = True, blank = True) 
    languages = models.ManyToManyField (Language, related_name = 'languages', help_text = 'Languages') 

答えて

0

あなたは多くの方法でこれを行うことができ、最も簡単な1の一つは、あなたがDjangoの管理を使用している場合、特別に非常にうまく統合され、django-smart-selectsアプリを使用しています。あなたがしなければならないinstall the appにあり、あなたのモデルを更新:

from smart_selects.db_fields import ChainedManyToManyField 


class Options (models.Model): 
    book = models.ForeignKey(Book, help_text='Text', null=True, blank=True) 
    languages = ChainedManyToManyField(Language, related_name='languages', help_text='Languages' 
             chained_field="book", 
             chained_model_field="languages") 
+1

ありがとうございます!それは箱から出てこなかったので、私はManyToManyFieldをBookからLanguageに移動しなければならなかったので、Options 'languages'フィールドは次のようになります: 'languages = ChainedManyToManyField(Language、chained_field =" book "、chained_model_field =" books " ) '。しかし今は完璧に動作しています! – user1785295

0

あなたはAJAXを経由してそれを作ることができます。ユーザーがブックを選択すると、DjangoであなたのビューのURLを呼び出します。

ビューは、ユーザーが選択したブックのIDを持つフォームを作成し、必要なフォームのHTMLのみを返します。次に、ajaxの成功では、htmlフォームを必要な場所に配置します。

+0

私はAJAXが答えだと思っていましたが、私はそれに精通しておらず、今は新しい技術の習得を避けたいと思います。とにかくありがとう! – user1785295

+0

私はAJAXでこれを作るのは本当に簡単だと思っています。私はあなたにチャンスを与えてくれることを願っています;) –

関連する問題