Django模型a对

Django模型a对,django,model,relation,Django,Model,Relation,我现在和django一起玩,我想建立一个简单的关系:一个舞蹈俱乐部的两名成员应该作为舞伴配对,以便参加舞蹈比赛。我已经为成员们提供了一个简单的模型: class Member(models.Model): firstname = models.CharField(max_length=32) lastname = models.CharField(max_length=32) member_id = models.IntegerField(unique=True) def __

我现在和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如需任何帮助和提示,您可以使用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

我假设一个注册会员可能会参加不止一次的比赛,并与不同的人结对

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

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

class TournamentRegistration(models.Model):
    tournament = models.ForeignKey("Tournament")
    dancer_1 = models.ForeignKey("Member")
    dancer_2 = models.ForeignKey("Member")
    # ...etc

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

partner = models.OneToOneField('self')
但是您可能希望仅在每个锦标赛中进行耦合,因此成员类可能不是最佳位置。您可以为每个锦标赛创建两个类:

class Couple(models.Model):
  tournament = models.ForeignKey('Tournament')
  member1 = models.ForeignKey('Member')
  member2 = models.ForeignKey('Member')

您可以尝试定义一个名为“夫妇”的模型,以及与成员表的两个外键关系,以及它们所处的锦标赛的关系:

class Couple(models.Model):
    partner_a = models.ForeignKey(Member)
    partner_b = models.ForeignKey(Member)
    tournament = models.ForeignKey(Tournament)
我不确定你的要求,但我介绍的方式允许会员成为多对情侣的一部分,而一对情侣是锦标赛中独一无二的。取决于你想怎么做,你可能希望有固定的情侣(例如斯泰西和鲍勃总是一起跳舞)。在这种情况下,你可能会希望从一场比赛到一对一对夫妇有一种多对多的关系:

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

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

谢谢。您提出的代码一开始不适合我(您必须设置相关的_name属性),但它最适合我。