我是python和django休息的新手。但我很困惑。在django rest框架中更新多對多關係的最佳方式是什麼? 我閱讀文檔 http://www.django-rest-framework.org/api-guide/relations/#manytomanyfields-with-a-through-model 默認情況下,將具有指定的貫穿模型的ManyToManyField作爲目標的關係字段設置爲只讀。Django Rest更新多對多ID
如果您明確指定一個指向具有直通模型的ManyToManyField的關係字段,請確保將read_only設置爲True。
所以,如果我有一個代碼
class Master(models.Model):
# other fields
skills = models.ManyToManyField(Skill)
class MasterSerializer(serializers.ModelSerializer):
skills = SkillSerializer(many=True, read_only=False)
這將返回技能對象列表。我沒有辦法更新它們。據我所知,當談到M2M時,Django更喜歡使用對象和對象ID。如果我使用yii或rails,我將使用「through」模型。我想獲得skill_ids字段。我可以讀寫。我可以這樣做寫操作
class MasterSerializer(serializers.ModelSerializer):
skill_ids = serializers.ListField(write_only=True)
def update(self, instance, validated_data):
# ...
validated_data['skill_ids'] = filter(None, validated_data['skill_ids'])
for skill_id in validated_data['skill_ids']:
skill = Skill.objects.get(pk=skill_id)
instance.skills.add(skill)
return instance
但我不能讓它返回字段中的skill_ids。併爲讀寫操作工作。
目前還不清楚什麼你正在嘗試做的。你可以添加一個你想插入的JSON例子嗎? – Linovia
{ID:123,FIRST_NAME: 「約翰」, 「skill_ids」:1,2,3]} – radzserg
常見的場景 - 你的技能列表和你的ID不是對象進行操作。發送完整對象來更新關係是沒有意義的。 { 「FIRST_NAME」: 「約翰」, 「技巧」:[ {ID:1,名稱: 「名稱1」}, {ID:2,名稱: 「名稱2」}, ] } – radzserg