2011-06-17 1 views
0

私は3つのモデルのチーム、プレーヤー、フィクスチャを持っています。Django管理者は、ManyToManyField内に表示されているデータを制限します

フィクス

class Fixture(models.Model): 
    """(Fixture description)""" 
    home = models.ForeignKey(Team, related_name="home_games") 
    away = models.ForeignKey(Team, related_name="away_games") 
    home_players = models.ManyToManyField(Player, related_name="home_games") 
    away_players = models.ManyToManyField(Player, related_name="away_games") 

class Player(models.Model): 
    """(Player description)""" 
    surname = models.CharField(blank=True, max_length=255) 
    forename = models.CharField(blank=True, max_length=255) 
    number = models.IntegerField(blank=True, null=True) 
    team = models.ForeignKey(Team, related_name="players") 

class Team(models.Model): 
    """(Team description)""" 
    name = models.CharField(blank=True, max_length=255) 
    location = models.CharField(blank=True, max_length=255) 

あなたはプレイヤーがチームに属している見ることができるように。 Home_team、away_team、home_players、away_playersとしてのフィクスチャ。さて、管理者の中では、「home_players」はすべてのチームのすべての選手をリストアップしています。

私はdjango管理アプリケーションの新機能ですが、home_teamに属するhome_playersとaway_teamsに属するaway_playersをどのように表示しますか?あなたはJavasScriptを使用する必要があると思い、自宅やアウェイチームを選択すると、あなたのaway_playersフィールドを持つように

おかげ

+0

登録したModelAdminクラスを実際に貼り付けて、フィクスチャオブジェクトをどのように表示しようとしているかを知る必要があります。 –

+0

adminクラスはちょうど標準のものです、 'admin.site.register(Fixture)' – dotty

答えて

2

は自動的に更新されます。

  1. は、ビューに選択を送る
  2. away_team
  3. 上の変更イベントをリッスンし、それはあなたの away_playersフィールドを移入するための新しいリストを返しています。 (このコードの掲載場所は get_urlsです)

これは間違いなくサポートされています。

通常、m2mフィールドまたは外部キーで結果をフィルタリングするには、formfield_for_manytomanyを使用できますが、編集中のオブジェクトにはアクセスできません。この方法では可能ではないと思います。

私は最も簡単な解決策は、フォーム2のステージを作ることだと思う:

  1. 記入ホーム/アウェイのフィールドに
  2. 保存モデル
  3. あなたは

選手の家庭で/離れて記入管理者のaddビューを上書きして最初の2つのフィールドのみを表示することもできます。

+0

私はこれを投稿した後、自分がモデルを保存するまで 'home_players'は利用できないと思っていました。このメソッドはうまくいき、フォームを編集しているなら正しいプレイヤーが表示されます。レコードが新しいものであれば 'home_players'と' away_players'を隠すことは可能ですか? – dotty

+0

'ModelAdmin.add_view'をオーバーライドし、' self.form'をm2mフィールドを持たないフォームに動的に設定することができます。次に、change_viewで 'self.form'を「本当の」フォームに設定してください。 –

関連する問題