Django模型结构 - 最佳实践

时间:2011-02-16 04:03:36

标签: django model structure relational-database

对于一个免费的小水果网站,我有以下模型关系:

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 个答案:

答案 0 :(得分:2)

这是一个完美的案例,您需要使用Generic Relations

不是将外键存储到每个外键中,而是存储内容类型ID(识别来自Apples的草莓)和对象ID。当然,您可以使用Location模型中的相关字符串,使用您自己的约定来开发它,但是在Content Type Framework内置的django中为您完成了所有艰苦的工作。