我在聯繫人和聯繫人組之間有多對多的關係。一個聯繫人可以屬於多個組,一個組可以包含多個聯繫人。在djangorestframework中處理可寫入的M2M關係的正確方法是什麼?
我希望能夠顯示這樣的數據,所以當顯示用戶所屬組的名稱時,我不需要執行多個查詢。
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
類型,它預計GroupSerializer
,所以訪問validated_data.get('groups')
不會讓我的ID,它會告訴我[{"non_field_errors":["Invalid data. Expected a dictionary, but got int."]}]}
我可以寫2個串行器 - 一個用於創建/更新,另一個用於顯示數據。你認爲這是一個正確的方法嗎?我是否正確地思考呢?你對這種方法有什麼看法?