通用关系模型声明

generic relation model declaration

只是一个简单的菜鸟问题。每次在模型中使用 GenericRelation 时是否都需要 content_type、object_id 和 content_object?我了解泛型关系背后的概念,但对如何实现它感到困惑。

以下是设置。

Address - 通用内容类型;用于不同的模型。

公司 - 使用地址通用内容类型的简单模型。

Person - 使用地址通用内容类型的简单模型。

是不是所有机型都必须具备这3个属性?提前致谢!

您仅在 Address 模型中需要此字段:

class Address(models.Model):
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    object_id = models.PositiveIntegerField()
    content_object = GenericForeignKey('content_type', 'object_id')

在模型 CompanyPerson 中,您只需使用 GenericRelation:

指定反向泛型关系
from django.contrib.contenttypes.fields import GenericRelation
class Company(models.Model):
    addresses = GenericRelation(Address)

class Person(models.Model):
    addresses = GenericRelation(Address)

有了这个你可以获得与这样的人相关联的地址:

 person.addresses.all()