2011-08-12 87 views
2

我目前正在玩django,我想塑造一個簡單的關係:一個舞蹈俱樂部的兩個成員應該配對作爲一對舞蹈夫婦,以參加一個舞蹈比賽。我已經有成員一個簡單的模型: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的任何幫助和提示

回答

3

也許你可以嘗試定義一個名爲像情侶模式,並以會員表中的兩個外鍵關係,與對比賽的關係,他們是:

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

可以使用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 
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')