2017-07-16 55 views
1

什麼副作用可以說我有一個配方的網站有兩個基本模式,「用戶」和「配方」應該在Django的許多一對多「的關係駐留在

class User(models.Model): 
    username= models.CharField() 
    email = models.CharField() 

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

我想補充的功能,以便用戶可以「喜歡」食譜。

在這種情況下,我需要使用許多一對多的關係。我的問題是,我如何決定添加關係的模型?

例如,每個用戶可以擁有的「收藏」的食譜清單:

class User(models.Model): 
    favorites = models.ManyToManyField(Recipe) 

或者,每個配方可能會對誰收藏了配方的用戶的列表:

是什麼考慮最佳做法?查詢性能更好嗎?

+1

它使絕對沒有任何區別,只是選擇的任何感覺不錯。 – knbk

+0

關於RDBMS沒有「方面」,因爲它總是會創建一箇中間表。這只是在模型中聲明它的一種方式,所以請隨意選擇對您更有意義的方法。 – Selcuk

+0

我完全不同意,「絕對沒有區別」。請看我的回答,如果我錯了,請糾正我的錯誤! @knbk :) – Ilja

回答

1

這是沒有但從數據庫的點差,如在評論中指出。

但是我有兩個參數,它無論對我做的。

  • 首先也是不太重要的,djangos admin默認情況下會以不同的方式處理這兩個模型。您定義關係的模型將獲取用於選擇相關對象的小部件。還有一個'+'用於方便地添加相關類型的新對象。
  • 其次,你必須包括你定義的關係一個的文件在國外的模式。如果你想寫一個可重複使用的應用程序,不依賴於任何外部的這一點很重要。這跟我的關係也因爲:
    我一次(當然,不只是有一次竟:))打破了我的應用/數據庫/等這樣的,我決定(也許錯,但它似乎與不守信的更多擔保的解決方案任何東西無意中)啓動一個新項目並在那裏複製代碼。在這種情況下,您必須註釋掉一些settings.INSTALLED_APPS來測試步驟,確保一切正常。在這種情況下,重要的是不要包含循環(包括註釋掉的應用程序會產生錯誤)。

這不是一個簡單的回答你的問題,而是我考慮的兩點。也許一些更有經驗的用戶可以糾正我,如果它在某種意義上是錯誤的。