Django模型何时使用GenericForeignKey

时间:2013-12-30 20:46:30

标签: python django django-models

我有以下型号:

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)另一种选择?

哪个是更好的选择,还是意见?感谢。

1 个答案:

答案 0 :(得分:2)

如果House可以有两只动物并且动物只能在一个房子中,并且您希望您的代码准备好轻松添加其他动物类型,那么AbstractAnimal应该有常规的外键,House和House不应该有任何外键在这种情况下。

对象(或模型或表格)之间的这种关系通常被称为“多对一”:许多动物与一个房子相连(或可以)。

GenericForeignKeys的示例用法是评论或标记模型,其中可以评论或标记许多不相关的内容类型(文章,博客条目,图像,视频等)。在这种情况下,注释或标记模型应具有GenericForeignKey到“未知”模型。互联网上提供的一些评论和标记包正在使用这种模式。

我认为GenericForeignKey最适合在编写可重用的应用程序或程序包时,其中模型在编写时需要与某些未知内容类型(其他模型)相关。