0

この種の質問はここで少なくとも何度も尋ねられていますが、私はdjangoから始めたばかりで、同様の質問からの解決策を適用してこれらをまとめるのに苦労しています.

私のモデルには3つのクラスが必要だと思います:

class Guild(models.Model):
    name = models.CharField(max_length=50)

class Battle(models.Model):
    guild1 = models.ForeignKey(Guild, related_name="guild_one")
    guild2 = models.ForeignKey(Guild, related_name="guild_two")
    # tournament = models.ForeignKey(Tournament) ???

class Tournament(models.Model):
    name = models.CharField(max_length=50)
    ????

ABattleは 2 つの間の戦争であり、 A の間Guildsに発生しTournamentます。には多くの可能性がありBattlesますTournament。A.Guild複数参加可能Tournamentsです。

ギルドごとに検索したり (参加したすべてのトーナメントから、すべてのバトルを確認したり)、トーナメントごとにどのバトルが行われたかを確認したり、トーナメントからアクセスしてどのギルドを確認したりしたいですか?参加したことがあります。おそらく Tournament クラスは Battle への参照を持つべきだと思うので、上記のコード (および私がコメントした行) は機能しますか?

また、特定のトーナメントに参加したすべてのギルドの名前を取得するクエリの例を挙げることができれば.

4

1 に答える 1

3

モデルはトーナメントへの外部キーを保持するための適切な場所であるBattleため、コメントを削除できますが、 を参照する場合は引用符を使用する必要がありTournamentます。Battlemodels.ForeignKey('Tournament')

参加しているすべてのギルドの名前をリスト形式で取得するには、後方関係オブジェクト guild_oneおよびオブジェクトのQ オブジェクトおよび を使用しguild_twoます。このような:Guild.values_list()

>>> from django.db.models import Q
>>> Guild.objects.filter(Q(guild_one__tournament=t) |\
... Q(guild_two__tournament=t)).values_list('name', flat=True)
[u'red', u'blue', u'green', u'black']

いくつtかのTournament.

于 2013-09-24T17:50:59.437 に答える