2011-11-22 75 views
0

我試圖在Django中表示混合物。喜歡的東西:用Django模型表示混合物

Chemical #1 - 50% 
Chemical #2 - 30% 
Chemical #3 - 20% 

我想我會使用的包裝所謂組成如下:

class Composition(models.Model): 
    """ Just a Wrapper """ 
    def save(...): 
     #Validate ingredients add up to 100% and such 


class Ingredient(models.Model): 
    composition = models.ForeignKey('Composition',related_name='ingredients') 
    name = models.CharField(max_length = 10) 
    percentage = models.IntegerField() 

我敢肯定有一個更好的方式來做到這一點。請記住,我是這樣做的,所以我可以稍後在Django管理員中使用內聯。你們推薦什麼?非常感謝)

+1

你不需要一個表來跟蹤混合物嗎?如果是這樣,這是一個基本的[ManyToMany](https://docs.djangoproject.com/en/dev/ref/models/fields/#manytomanyfield)關係 –

+0

@Dmitry通過跟蹤混合物,你的意思是什麼?我有另一個模型,這個模型與構圖 – cookM

+0

有着onetoone的關係好吧,我會嘗試使用ManyToMany關係。我必須看看我是否可以在管理員中以相同的方式表示他們。謝謝! – cookM

回答

3

在我看來,好像保留成分列表然後在創建作品時引用它們,而不是每次輸入配料名稱。你可以做它用多對多的關係,並通過一個表,像這樣:

class Ingredient(models.Model): 
    name = models.CharField(max_length=10) 

class Composition(models.Model): 
    name = models.CharField(max_length=255) 
    ingredients = models.ManyToManyField(Ingredient, through='CompositionIngredient') 

    def save(...): 
     #Validate ingredients add up to 100% and such 

class CompositionIngredient(models.Model): 
    composition = models.ForeignKey(Composition) 
    ingredient = models.ForeignKey(Ingredient) 
    proportion = models.DecimalField() 

更多信息,請參見Django docs

編輯:這是documentation關於如何通過管理界面中的表處理。

+0

這很不錯,不知道你能做到這一點。我會試一試,也是rtfm。謝謝! – cookM

+0

感謝您的補充文件,如果我可以的話會給你更多的分數:) – cookM