创建Django Rest Framework序列化程序,以抽象/组合模型的多个实例

时间:2018-07-09 15:31:14

标签: python django serialization django-rest-framework

让我们说我有以下模型:

Job(models.Model):
  name = models.CharField(max_length=255)

JobDateRange(models.Model):
  job = models.ForeignKey(Job)
  start = models.DateField()
  end = models.DateField()

计划的Job可能有多个有效日期范围。当数据库将日期存储在开始-结束范围(旧式)中时,客户端将与活动日期列表进行交互。该API不应允许直接访问JobDateRange对象,而应通过Job API端点提供get / create / delete / patch方法。例如,如果作业具有链接的日期范围2018-01-01 -> 2018-01-022018-01-06 -> 2018-01-07

/api/v1/jobs/${some_id} <GET>将产生:

{
  id: ${some_id},
  name: "Job Name",
  dates: [
    "2018-01-01",
    "2018-01-02",
    "2018-01-06",
    "2018-01-07"
  ]
}

使用日期的SerializerMethod字段可以轻松完成此部分,但是,我需要能够使用相同的格式创建/更新数据。例如。 -如果我想在第三个日期范围内打补丁,2018-01-10 -> 2018-01-11我会选择执行以下操作:

/api/v1/jobs/${some_id} <PATCH>,正文为:

{
  dates: [
    "2018-01-01",
    "2018-01-02",
    "2018-01-06",
    "2018-01-07",
    "2018-01-10",
    "2018-01-11"
  ]
}

然后需要创建新范围。

我已经收集到我需要为JobDateRange创建一个自定义序列化程序,并在我的JobSerializer中使用它,但是由于JobDateRange序列化程序将合并和抽象{ {1}}放入日期列表,我不确定该如何进行。此外,在该补丁程序中,我需要传递Job对象以获取/编辑/删除任何已更改的现有日期范围。有什么想法吗?

0 个答案:

没有答案