让我们说我有以下模型:
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-02
和2018-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对象以获取/编辑/删除任何已更改的现有日期范围。有什么想法吗?