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是两人之间的战争,Guilds发生在 a 期间TournamentBattles一个中可以有很多Tournament。一个Guild可以参加几个Tournaments

我希望能够按公会搜索(查看他们的每场战斗,从他们参加的每场锦标赛中),按锦标赛查看已经进行了哪些战斗,另外我想通过锦标赛访问以查看哪些公会曾经参加过。上面的代码(加上我注释掉的那行)会起作用吗,因为我觉得也许 Tournament 类应该参考 Battle?

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

4

1 回答 1

3

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

要以列表格式获取所有参与公会的名称,请使用对象的反向关系对象guild_oneQ对象和. 像这样:guild_twoGuild.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 回答