2011-08-12 17 views
2

私は現在djangoで遊んでいますが、私は単純な関係をモデルにしたいと思います。ダンスクラブに参加する2人のメンバーはダンスカップルとしてペアにしてダンストーナメントに参加する必要があります。トーナメントの参加は、私が(で夫婦-関係を定義する必要が夫婦であるのでDjangoモデルのペア

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

:私もトーナメントモデルを持っている

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 

:私はすでにメンバーのための単純なモデルを持っています少なくともそれは私の推測だろう)。しかし、私は本当にそれをどうやってやるのか分からない。あなたが他のメンバーにメンバーをマップするためにOneToOneField関係を使用することができます任意のヘルプやヒント

答えて

3

あなたはおそらく、彼らがしているトーナメントに関係して、カップルのようなものというモデル、およびメンバー表には2つの外部キー関係を定義してみてください:

あなたは大会ごとにカップルクラスを作成することができます
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) 

、およびトーナメントは多くのカップルを持つことができます。その場合は、おそらくカップルのトーナメントから多対多の関係を持っているしたいと思います。

+0

ありがとうございました。あなたは提案されたコードが最初に私のためには機能しませんでした(あなたはrelated_name属性を設定する必要があります)が最適です。 – tr9sh

1

私は、登録されたメンバーが複数のトーナメントに参加する可能性があると想定し、別の人々と対戦します。

しかし、トーナメント内では、各メンバーは1つのペアにしか参加できません。

以上が保持している場合、私はどうしたら、各部材のパートナー与えることであろう

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

一つの方法:

partner = models.OneToOneField('self') 

をしかし、あなたは唯一のトーナメントごとのカップリングを行っているしたい場合がありますメンバークラスは最適な場所ではないかもしれません。

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