我已经阅读了有关Django内容类型的文档,但我似乎无法正确地想到将其应用于我的情况的方法。常见的“标签”示例有点过于简单。
我的情况:我有一个名为Docket的模型。它有几个领域,拥有各种简单的价值观。但是,它还需要有目的地和来源。在我的应用程序中,目标和源都可以是Facility Object或TransFrontier Object。
例如,你可以拥有一个Docket,它有一个Facility作为它的源,一个TransFrontier作为它的目的地。
你也可以有一个Docket,其中TransFrontier作为其来源,Faclity作为其目的地。
此外,用户在创建新文档时不会创建新的Facility或TransFrontier对象。这些将是我们在数据库中已有的现有Facility或TF对象。
为此,我最初想到了ContentType和Generic Foreign Key。我想出了这个模型:
class Docket(BaseDocket):
# Fields
dest_id = models.PositiveIntegerField()
destination = GenericForeignKey("dest_c_type", "dest_id")
source_id = models.PositiveIntegerField()
source = GenericForeignKey("source_c_type", "source_id")
# limit dest & source to facility and transfrontier
limit = models.Q(app_label='facilities', model='facility') | models.Q(app_label='permitting', model='transfrontier')
# Relationship Fields
dest_c_type = models.ForeignKey(ContentType, related_name="dest_c_type", limit_choices_to=limit)
source_c_type = models.ForeignKey(ContentType, related_name="source_c_type", limit_choices_to=limit)
class TransFrontier(models.Model):
# fields for TF ...
class Facility(models.Model):
# fields for Facility ...
这是否是正确的结构?
有谁知道如何为这种关系制作DRF序列化器?我不确定如何主要向它发送数据。