2

私は現在 django で遊んでいて、単純な関係をモデル化したいと考えています。ダンス トーナメントに参加するには、ダンス クラブの 2 人のメンバーをダンス カップルとしてペアにする必要があります。私はすでにメンバーの単純なモデルを持っています:

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

トーナメントの参加者はカップルなので、カップル関係を定義する必要があります (少なくともそれは私の推測です)。しかし、私は本当に私がそれを行う方法を理解していません.

ヘルプとヒントについてはティア

4

4 に答える 4

4

Couple のようなモデルと、Member テーブルへの 2 つの外部キー リレーションシップと、それらが参加している 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

登録メンバーは複数のトーナメントに参加する可能性があり、将来的にはさまざまな人々とペアになる可能性があると想定しています.

ただし、トーナメント内では、各メンバーは 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

1 つの方法は、各メンバーにパートナーを与えることです。

partner = models.OneToOneField('self')

ただし、カップリングをトーナメントごとにのみ行いたい場合があるため、メンバー クラスは最適な場所ではない可能性があります。トーナメントごとにカップル クラスを作成できます。

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