5

私の Django プロジェクトには 2 つのモデルがあります。

  • マッチ
  • プレーヤー

Match には、プレイヤーを指す ManyToMany プロパティがあるため、複数のプレイヤーがマッチで競うことができます。プレーヤーのフル ネームの結合を使用して、「Richard Henry vs John Doe」のような有益なオブジェクト名を Django admin に返したいと思います。ただし、以下は失敗します。

class Match(models.Model):
    players = models.ManyToManyField(Player, verbose_name='Competitors')

    def __unicode__(self):
        return " vs ".join(self.players)

ManyToManyFields は単なるリストではありませんか? なぜ参加できないのですか?どんな入力でも大歓迎です。これが私のプレーヤーモデルです。

class Player(models.Model):
    full_name = models.CharField(max_length=30)

    def __unicode__(self):
        return "%s" % self.full_name

ありがとう!

編集self.players.list_display:これをリストとして返すために使用できることを発見しました。トレースバックを吐き出すことはもうありませんが、何らかの理由で__unicode__名前が返されるようになりNoneました。それはなぜでしょうか?

編集 2 : 変更されたコード:

class Match(models.Model):
    players = models.ManyToManyField(Player, verbose_name='Competitors')

    def __unicode__(self):
        return " vs ".join(self.players.list_display)
4

3 に答える 3

13

別のオプションは次のとおりです。

return " vs ".join(p.full_name for p in self.players.all())

注: これを元に戻して申し訳ありません -- 墓掘り人 :-)

于 2010-07-08T13:11:20.897 に答える
6

「ManyToManyFields は単なるリストではありませんか?」

いいえ。

それらはクエリセットです。これはリストに似ていますが、実際にはリストではありません。

これを行う。

return " vs ".join(list(self.players))

list 関数はクエリ セットの評価を強制し、リスト オブジェクトを返します。

于 2009-02-24T15:48:44.127 に答える
0

いいえ、ManyToManyFieldはリストではありません。これは単一のキーであり、試合のプレーヤーごとに1つのMatchインスタンスがあります。

__unicode __()メソッドでクエリを実行するのは、パフォーマンスに大きな打撃を与える可能性が高いため、望ましくありません。テンプレートにXとYを表示するだけです。

于 2009-02-24T15:50:59.380 に答える