2012-09-02 40 views
1

我正在做一個啤酒網站,而我被卡住了。我需要有一個食譜,我可以涉及許多不同的成分。有沒有辦法創建一個模型「成分」,並繼承許多不同的模型:「合」,「穀物」等我想這樣做,所以我有我的配方和成分之間的關​​系,我沒有創建100種不同的關係來涵蓋每種成分。django繼承傷害了我的大腦

這可能嗎?

+0

你說你想要一個名爲合模型,稱爲糧食的模式,等等?你不想有一個領域的成分類型或類似的東西? –

+0

一般來說,只有當您需要使用不同的代碼才能使用它時,您應該有一個單獨的模型。在Hop和Grain之間不太可能出現這種情況,將它們作爲兩種類型的成分對待會更簡單(帶有'ingredient_type'字段來區分它們) –

+0

它們具有不同的字段,例如我想要啤酒花的酸性水平,並且我想要穀物的糖勢 – danatron

回答

1

儘管在大多數情況下我會親自勸告它,因爲表繼承在Django中是一種痛苦(imho)。

你可以這樣說:

class Recipe(models.Model): 
    name = models.CharField() 

class Ingredient(models.Model): 
    name = models.CharField() 
    recipes = models.ManyToManyField(Recipe, related_name='%(app_label)s_%(class)s') 

class Hop(Ingredient): 
    pass 

class Grain(Ingredient): 
    pass 
+0

聽起來很痛苦,但爲不同參數的所有100種不同類型指定hop_additions,grain_additions等的替代方法聽起來很亂。我有其他選擇嗎? – danatron

+0

另一種方法是與David Robinson指定的一樣,使用常見的Ingredient模型並簡單地指定類型。查詢這樣的內容可能會很痛苦,因爲您有很多不同的模型可以單獨查詢。 – Wolph

+0

再一次澄清,如果我有兩種使用配料的模型,比如配方和日誌,該怎麼辦?有沒有辦法設置我的manytomany來處理多個模型? – danatron