Django多个通用外键 - 如何构建DRF序列化器

时间:2017-10-11 14:05:11

标签: python django generics django-rest-framework

我已经阅读了有关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序列化器?我不确定如何主要向它发送数据。

0 个答案:

没有答案