0

如何創建如下關係:與兩個或更多其他表具有特定關係的Django表

想象一下餐廳。他們的數據表中有一個用於配方,另一個用於配料。還有另外一個,其中包含食物種類,如晚餐,午餐,早餐,甜點,湯。我們將其命名爲cat_food。

廚師想通過使用cat_food來分類食譜和配料。例如,從食譜到cat_food在所有其他列中存在「ManyToOne」關係。所以一個食譜有一個類別,一個類別有幾個食譜。

但廚師也想要這樣分類配料。在這裏,我們將有一個'ManyToMany'的關係,而我們可以在甜點食譜中使用一種成分,就像在晚餐或湯配方中一樣。

一個解決方案可能是爲食譜和配料創建一個cat_food表。但是,如何創建cat_food表來存儲配方或配料?(取決於給出的內容)

我的想法是使用中間模型並將'foreignKeys'與字段選項'blank = True'和'null = True'。但我對此並不滿意。 它可能會導致長期的一些數據庫問題?有沒有更好的方法來處理這種情況?

回答

0

我不確定這是你想要的,但也許你可以爲你的兩個不同的表創建每個類別的布爾值?

例如,如果您的廚師有「草莓」項目,而您的不同類別是晚餐,午餐,早餐,甜點和湯。然後,你可以檢查這些食物可以進入的類別。例如:早餐==真,甜點==真,湯==假。和其他類別。

如果你同時做了這兩件事,那麼你可以做到這一點,以便在你的模板中有食譜和成分,並有按鈕或下拉菜單來過濾結果。

+0

我喜歡這個想法,但是......我想盡可能減少冗餘。我的意思是,如果有一個新的食品cat_food,那麼我只是想把它放在那裏作爲食譜或配料的新選項。在這裏,我的例子有點太過分了,因爲很難創建一個新的食品類別...假設新的食品是天文晚餐......現在,當我添加一個新的配方或成分時,我想要一個將所有可能的cat_food項目下拉菜單。我想盡可能少地使用列。 –

+0

這很有道理,也許你可以創建第三種內容類型?我認爲您可以導入您單獨創建的內容類型。 許多關係也可能起作用,我之前使用過這些關係,它們非常有用。嘗試此鏈接,看看它是否會工作 - https://docs.djangoproject.com/en/1.9/topics/db/examples/many_to_many/ – overstreetce

+0

我的問題是,兩個表溝通相同的一個,這是貓食。通過這個我有一個食譜和cat_food成分的專欄。當有人給出另一個是空的。我可以通過「blank = True」和「null = True」來處理這個問題。但是我對後面的故障排除不太確定。 –

0

恕我直言,標準關係,外鍵和多對多,如你所說,似乎是最好的;因爲你可以管理每個項目(配方,成分,類別)與合適的領域和Django支持參考他們的聯繫非常好,因此使查詢考慮他們的關係變得非常容易。

此外,如果您想要一個帶額外字段的定製M2M表,您可以使用through attibute自行構建。

+0

所以你會說這是一個很好的方法來做到這一點。使用食譜和配料創建一個cat_food,而它們都具有「blank = True」和「null = True」字段選項。所以它可以是食譜項目或成分。是的,我正在考慮通過直通表使用直接表格。我想這在這種情況下是有幫助的 –

相關問題