2015-04-06 89 views
1

我是新來的數據庫和Django的新。我需要你的幫助。ManyToManyFields第二範式的模型設置

我想要例如一個數據庫與人有例如不同的襯衫。襯衫有不同的長度。

例如彼得有三件襯衫。紅色的T恤,藍色的長袖襯衫和藍色的T恤。

馬庫斯也有一件紅色的襯衫,但它應該只有長袖。

如何創建一個模型,其中第二個標準化的Foreign或ManyToManyField可以具有不同的值,具體取決於頂級(Person)數據?

或者我是否需要將每件襯衫作爲不同的條目(藍色長條形,藍色短條形等)並將其與此人聯繫?

Django通常創建一個附加表格,其ID爲人物ID和襯衫ID。 有沒有辦法爲袖子添加第三排呢?

我的Django模型是這樣的:

Class Length(models.Model): 
    name_length = models.CharField(max_length=10) # e.g. short, long, half 

Class Shirt(models.Model): 
    name_shirt = models.CharField(max_length=20) # e.g. red-one, blue-one 
    shirt_length = models.ManyToManyField(Length) 

Class Person(models.Model): 
    name = models.CharField(max_length=20) 
    persons_shirt = models.ManyToManyField(Shirt) 

謝謝

回答

0

也許是最好的解決辦法是:

class Length(models.Model): 
    name_length = models.CharField(max_length=10) 

class Shirt(models.Model): 
    name_shirt = models.CharField(max_length=20) 
    shirt_length = models.ForeignKey(Length) 

class Person(models.Model): 
    name = models.CharField(max_length=20) 
    persons_shirt = models.ManyToManyField(Shirt) 

所以我們在這裏,Shirst是獨立instanse,只取決於長度,如果name_shirts與顏色有關,也許最好是ForeignKey(Color),但如果它與名稱很接近,那麼你的版本是 好的。 答案是,你需要將每件襯衫都作爲單一條目。而且,說每個shirt類型應該是單個條目會更準確。因爲如果彼得和馬庫斯的紅色T恤之間沒有區別,那麼這件紅色T恤是一個單獨的入口,不依賴於人的物品。

BTW class以小寫字母開頭。