在Djangorest框架中处理可写M2M关系的正确方法是什么?
我在联系人和联系人组之间存在多对多关系。一个联系人可以属于多个组,一个组可以包含多个联系人 我希望能够像这样显示数据,所以在显示用户所属组的名称时,不需要进行多次查询在Djangorest框架中处理可写M2M关系的正确方法是什么?,django,serialization,django-rest-framework,Django,Serialization,Django Rest Framework,我在联系人和联系人组之间存在多对多关系。一个联系人可以属于多个组,一个组可以包含多个联系人 我希望能够像这样显示数据,所以在显示用户所属组的名称时,不需要进行多次查询 GET { "id": 1, "name": "Gandalf", "groups": [ { "id": 3, "name": "Lord of the rings" } ] } 但如果我更新,我希望能够使用ID或URL更新,例如 POST { "id": 1,
GET
{
"id": 1,
"name": "Gandalf",
"groups": [
{
"id": 3,
"name": "Lord of the rings"
}
]
}
但如果我更新,我希望能够使用ID或URL更新,例如
POST
{
"id": 1,
"name": "Gandalf",
"groups": [
[2]
]
}
这将把它从第3组中移除,然后放到第2组。我知道我应该写一封信,但我有两个问题:
1) 我想正确地做这件事,当我想做这件事的时候,什么应该是一个好的实践。我应该发送ID还是整个对象,比如
POST
{
"id": 1,
"name": "Gandalf",
"groups": [
{
"id": 2,
"name": "Wizards"
}
]
}
这个对我来说似乎有点奇怪,因为我需要发送不需要的信息(本例中的名称)
2) 如果我能遵循id/url原则,我该如何做?在自定义create/update
方法中,我无法验证id,因为序列化程序指向GroupSerializer
并且不接受int
类型,它需要GroupSerializer
,因此访问验证的\u数据。get('groups')
不会获取id,它会告诉我[{“非\u字段\u错误”:[无效数据。应为字典,但得到int.“]}]}
我可以编写两个序列化程序,一个用于创建/更新,另一个用于显示数据。你认为这是一种正确的方法吗?我的想法是否正确?你认为这种方法如何?对于#1,你可以将名称保留为只读字段,在这种情况下,你将其用于读取,并将其用于写入操作
对于#2,由于您希望保持一致性,最好将其发送:
POST
{
"id": 1,
"name": "Gandalf",
"groups": [
{"id": 2}
]
}
您真的不想为读写操作使用不同的样式。对于#1,您可以将名称保留为只读字段,在这种情况下,您可以将其用于读操作,而将其用于写操作
对于#2,由于您希望保持一致性,最好将其发送:
POST
{
"id": 1,
"name": "Gandalf",
"groups": [
{"id": 2}
]
}
你真的不希望读写操作有不同的风格,真的