我在Contact和ContactGroup之间有很多关系。一个联系人可以属于多个组,一个组可以包含多个联系人。
我希望能够显示这样的数据,因此在显示用户所属的群组名称时,我不需要进行多次查询。
GET
{
"id": 1,
"name": "Gandalf",
"groups": [
{
"id": 3,
"name": "Lord of the rings"
}
]
}
但如果我更新,我希望能够使用id或url进行更新,例如
POST
{
"id": 1,
"name": "Gandalf",
"groups": [
[2]
]
}
那将从第3组中删除它并将其放入第2组。我知道我应该写一个Writable nested serializer,但我有两个问题:
1)我想要正确地做到这一点,当我想要这样做时,这应该是一个很好的做法。我应该发送id或像
这样的整个对象POST
{
"id": 1,
"name": "Gandalf",
"groups": [
{
"id": 2,
"name": "Wizards"
}
]
}
这个对我来说似乎有点奇怪,因为我需要发送不需要的信息(在这种情况下是名字)。
2)如果我可以使用id / url原则,我该怎么做?在自定义create/update
方法中,我无法验证ID,因为序列化程序指向GroupSerializer
并且不接受int
类型,它预计{{1因此,访问GroupSerializer
无法获取ID,它会告诉我validated_data.get('groups')
我可以编写2个序列化程序 - 一个用于创建/更新,另一个用于显示数据。你认为这是一个正确的方法吗?我在第一时间做了正确的思考吗?您如何看待这种方法?
答案 0 :(得分:0)
对于#1,您可以将该名称保留为只读字段,在这种情况下,您可以将其用于读取,并且它将被丢弃以进行写入操作。
对于#2,因为你想保持一致,你最好把它发送:
POST
{
"id": 1,
"name": "Gandalf",
"groups": [
{"id": 2}
]
}
你真的不想为读写操作设置不同的风格。