Python 具有关系的Django模型

Python 具有关系的Django模型,python,django,foreign-keys,models,Python,Django,Foreign Keys,Models,我知道,这类问题在这里至少被问过很多次,但我是从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 =

我知道,这类问题在这里至少被问过很多次,但我是从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)
    ????
战斗
是两个
行会之间的战争
,发生在
锦标赛
期间。在
锦标赛中可以有许多
战役
。一个
公会
可以参加多个
锦标赛

我希望能够通过公会搜索(查看他们的每一场战斗,从他们参加的每一场比赛中),通过比赛查看已经进行了哪些战斗,并且我希望能够通过比赛访问,查看哪些公会曾经参加过。上面的代码(加上我推荐的那行代码)行得通吗,因为我觉得也许锦标赛类应该参考Battle


另外,如果您可以给出一个查询示例,该查询将获取参与给定锦标赛的所有协会的名称

model
Battle
是拥有锦标赛外键的好地方,因此您可以删除注释,尽管您应该使用引号来引用
锦标赛,因为它是在
Battle
之后声明的,即
models.ForeignKey(“锦标赛”)

要以列表格式获取所有参与公会的名称,请使用
guild
对象的
guild\u one
guild\u two
,以及。像这样:

>>> 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
引用了一些
锦标赛

模型
Battle
是拥有锦标赛外键的好地方,因此您可以删除注释,尽管您应该使用引号引用
锦标赛
,因为它是在
Battle
之后声明的,例如,
型号。外键(“锦标赛”)

要以列表格式获取所有参与公会的名称,请使用
guild
对象的
guild\u one
guild\u two
,以及。像这样:

>>> 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
引用了一些
锦标赛

非常流畅,谢谢!我还试图获得所有曾与某个特定公会斗争过的公会的名称。换句话说,公会和公会本身的所有对手。我对其进行了编码,但我只获取公会ID而不是名称:
Battle.objects.filter(Q(guild1=g)| Q(guild2=g)).values\u list('guild1','guild2').distinct()
。你能提个建议吗?非常好,谢谢!我还试图获得所有曾与某个特定公会斗争过的公会的名称。换句话说,公会和公会本身的所有对手。我对其进行了编码,但我只获取公会ID而不是名称:
Battle.objects.filter(Q(guild1=g)| Q(guild2=g)).values\u list('guild1','guild2').distinct()
。你能提个建议吗?