Save a many-to-many model in Django/REST?

自作多情 提交于 2019-11-30 14:38:09

DRF doesn't works create models which are nested serializers objects or Many to Many fields. So is necessary to override Serializer create method and create/get M2M models before create ProjectNode. Try to override create(self, validated_data) in your serializer and work with your data inside this method..

Example:

My model Project has M2M relation with ProjectImages. In ProjectSerializer I override create method like this.

 def create(self, validated_data):
        try:
            # Remove nested and M2m relationships from validated_data
            images = validated_data.pop('projectimage_set') if 'projectimage_set' in validated_data else []

            # Create project model
            instance = Project(**validated_data)
            if status:
                instance.set_status(status)

            project = instance.save()

            # Create relations
            for image in images:
                ProjectImage.objects.create(project=project, **image)

        except exceptions.ValidationError as e:
            errors_messages = e.error_dict if hasattr(e, 'error_dict') else e.error_list
            raise serializers.ValidationError(errors_messages)

        return project

Hope this help!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!