2011-02-16 159 views
1

對於一個小免費的水果網站,我有以下型號的關係:Django的模型結構 - 最佳實踐

3類 - 蘋果,草莓,和位置

蘋果和草莓列表的所有「屬性」水果:

class Apple(models.Model):  
    treeSize = ... 
    age = ... 

class Strawberry(models.Model): 
    fieldArea = ... 

現在我想記錄所有的位置與水果。到目前爲止,我有一個蘋果和草莓的位置和屬性的類,這使得ForeignKeys保持這種水果。但那不可能。 它看起來效率很低,尤其是。如果我添加多個其他水果類型。另外,我需要檢查每個位置是否至少有一個水果按鍵。

class Location(models.Model):  
    lat = ... 
    lng = ... 
    appleType = models.ForeignKey(Apple, null = True) 
    strawberryType = models.ForeignKey(Strawberry, null = True) 

有沒有更好的方法來設計關係或模型結構? 這個問題的最佳做法是什麼?

謝謝您的建議!

+1

這是「ORM」和「OODB」之間的關係開始分解的地方。 – 2011-02-16 04:10:26

回答

2

這是一個完美的案例,您需要使用Generic Relations

不是將外鍵存儲到其中的每一個,而是存儲內容類型標識(可識別來自蘋果的草莓)和對象標識。當然,您可以使用Location模型中的相關字符串按照自己的慣例進行開發,但是在django的Content Type Framework內建的所有這些努力都是爲您完成的。