2011-12-05 49 views
0

用戶表:如何在django模型中描述這種關係?

-------------------- 
    | id | name | age | 
    -------------------- 
    | |  |  | 
    -------------------- 

型號:

class User(models.Model): 
    name = models.CharField(max_length=30) 
    age = models.SmallIntegerField() 

pet表:

-------------------- 
    | id | name | intro | 
    -------------------- 
    | |  |  | 
    -------------------- 

型號:

class Pet(models.Model): 
    species = models.CharField(max_length=30) 
    intro = models.TextField() 

現在我要描述這種關係:
用戶可以擁有多隻寵物(擁有獨特的物種),並且我想存儲用戶獲得該寵物的時間。它應該看起來像這樣在數據庫:

-------------------------------- 
    | id | user_id | pet_id | since | 
    -------------------------------- 
    | |   |  |  | 
    -------------------------------- 

,但我不知道該怎麼形容它在Django的模型......

回答

2

您可以使用「通過「模型。基本上,你自己定義你自己的中間表,而不是讓Django自動爲你做:

class User(models.Model): 
    ... 
    pets = models.ManyToManyField(Pet, through='UserPet') 

class UserPet(models.Model): 
    user = models.ForeignKey(User) 
    pet = models.ForeignKey(Pet) 
    since = models.DateTimeField(auto_now_add=True) 
+0

是用戶需要的行嗎? – wong2

+0

無論多對多關係如何定義,必要的部分是'through ='UserPet'。如果它在'Pet'上,你可以很容易地做'users = models.ManyToManyField(User,through ='UserPet')' –

+0

我的意思是如果沒有寵物= models.ManyToManyField(Pet,through ='UserPet' ),這也應該起作用。真的嗎? – wong2

0

試試這個:

class UsersPet(models.Model): 
    pet = models.ForeignKey(Pet) 
    user = models.ForeignKey(User) 
    since = models.DateTime()