2011-02-16 164 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内建的所有这些努力都是为您完成的。