0

チーム、プレーヤー、フィクスチャの 3 つのモデルがあります。

備品

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 としての Fixture。これで、管理画面のフィクスチャの下にある「home_players」に、すべてのチームのすべてのプレーヤーがリストされます。

私は django 管理アプリケーションを初めて使用しますが、home_team に属する home_players と away_teams に属する away_players を表示するにはどうすればよいですか?

ありがとう

4

1 に答える 1

2

away_playersホーム チームまたはアウェイ チームを選択したときにフィールドが自動的に更新されるようにするには、JavaScript を使用する必要があります。

  1. away_team の変更イベントをリッスンする
  2. ビューに選択を送信し、新しいリストを返してaway_playersフィールドに入力します。(このコードが存在する場所についてはget_urlsを確認してください)

そのままではサポートされていません。

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

最も簡単な解決策は、フォーム 2 ステージを作成することだと思います。

  1. ホーム/アウェイ フィールドに記入する
  2. モデルを保存
  3. ホーム/アウェイの選手を記入する

add最初は最初の 2 つのフィールドのみを表示するように管理ビューをオーバーライドすることもできます。

class MyForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        # make sure we're editing a saved model
        if self.instance.id:
            self.fields['home_players'].queryset = Player.objects.filter(team=self.instance.home)
            self.fields['away_players'].queryset = Player.objects.filter(team=self.instance.away)

    class Meta:
        model = Fixture


class MyAdmin(admin.ModelAdmin):
    form = MyForm
于 2011-06-17T20:40:36.243 に答える