2

我目前正在玩 django,我想建立一个简单的关系模型:舞蹈俱乐部的两名成员应该配对为跳舞的情侣,以便参加舞蹈比赛。我已经为成员准备了一个简单的模型:

class Member(models.Model):
  firstname = models.CharField(max_length=32)
  lastname  = models.CharField(max_length=32)
  member_id = models.IntegerField(unique=True)
  def __unicode__(self):
    return self.firstname + ' ' + self.lastname

我还有一个锦标赛模型:

class Tournament(models.Model):
  name = models.CharField(max_length=32)
  def __unicode__(self):
    return self.firstname + ' ' + self.lastname

由于锦标赛的参与者是一对我需要定义一个情侣关系(至少这是我的猜测)。但我真的不明白我会怎么做。

tia 寻求任何帮助和提示

4

4 回答 4

4

您可以尝试定义一个名为 Couple 的模型,以及与 Member 表的两个外键关系,以及与它们所在的 Tournament 的关系:

class Couple(models.Model):
    partner_a = models.ForeignKey(Member)
    partner_b = models.ForeignKey(Member)
    tournament = models.ForeignKey(Tournament)

我不确定您的要求,但我提出的方式允许成员成为多对夫妇的一部分,而一对夫妇是锦标赛的唯一成员。取决于你想怎么做,你可能想要固定情侣(即 Stacey 和 Bob 总是一起跳舞)。在这种情况下,您可能希望从锦标赛到情侣建立多对多关系:

class Tournament(models.Model):
    couples = models.manyToManyField(Couple)

所以一对夫妇可以参加很多比赛,一场比赛可以有很多对。

于 2011-08-12T18:35:27.757 回答
1

您可以使用 OneToOneField 关系将成员映射到其他成员。

class Member(models.Model):
  firstname = models.CharField(max_length=32)
  lastname  = models.CharField(max_length=32)
  member_id = models.IntegerField(unique=True)
  partner = models.OneToOneField('Member', unique=True) #This should suffice.
  def __unicode__(self):
    return self.firstname + ' ' + self.lastname
于 2011-08-12T18:29:36.920 回答
1

我将假设注册会员可能会参加不止一场比赛,并在未来与不同的人配对。

但是在锦标赛中,每个成员只能是一对中的一部分。

如果上述情况成立,我会这样做,

class TournamentRegistration(models.Model):
    tournament = models.ForeignKey("Tournament")
    dancer_1 = models.ForeignKey("Member")
    dancer_2 = models.ForeignKey("Member")
    # ...etc
于 2011-08-12T18:33:54.360 回答
1

一种方法是给每个成员一个合作伙伴:

partner = models.OneToOneField('self')

但是您可能希望只在每场比赛中完成耦合,因此 Member 类可能不是最好的地方。您可以为每个锦标赛创建一个 Couple 课程:

class Couple(models.Model):
  tournament = models.ForeignKey('Tournament')
  member1 = models.ForeignKey('Member')
  member2 = models.ForeignKey('Member')
于 2011-08-12T18:34:56.710 回答