我有以下型号:
class Dog(AbstractAnimals):
pass
class Meta:
app_label = 'animals'
class Cat(AbstractAnimals):
pass
class Meta:
app_label = 'animals'
这是摘要:
class AbstractAnimals(models.Model):
description = models.CharField()
这是我的问题所在。如果我有一个 House 模型,它可以有一个或两个 动物。我可以想到两种方法,但我不确定哪种方式更好。
class House(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='animal', null=True)
1)在众议院模型中使用2 GenericForeignKey
2)使用2个标准 ForeignKey 。
3)另一种选择?
哪个是更好的选择,还是意见?感谢。
答案 0 :(得分:2)
如果House可以有两只动物并且动物只能在一个房子中,并且您希望您的代码准备好轻松添加其他动物类型,那么AbstractAnimal应该有常规的外键,House和House不应该有任何外键在这种情况下。
对象(或模型或表格)之间的这种关系通常被称为“多对一”:许多动物与一个房子相连(或可以)。
GenericForeignKeys的示例用法是评论或标记模型,其中可以评论或标记许多不相关的内容类型(文章,博客条目,图像,视频等)。在这种情况下,注释或标记模型应具有GenericForeignKey到“未知”模型。互联网上提供的一些评论和标记包正在使用这种模式。
我认为GenericForeignKey最适合在编写可重用的应用程序或程序包时,其中模型在编写时需要与某些未知内容类型(其他模型)相关。