对于一个免费的小水果网站,我有以下模型关系:
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)
有没有更好的方法来设计关系或模型结构? 这个问题的最佳做法是什么?
感谢您的建议!
答案 0 :(得分:2)
这是一个完美的案例,您需要使用Generic Relations。
不是将外键存储到每个外键中,而是存储内容类型ID(识别来自Apples的草莓)和对象ID。当然,您可以使用Location
模型中的相关字符串,使用您自己的约定来开发它,但是在Content Type Framework内置的django中为您完成了所有艰苦的工作。