pass ajax data to django model with many to many relationship
I’ve been working on this for a while and Im stumped. I’ve been reading through the docs…
https://www.django-rest-framework.org/api-guide/relations/#nested-relationships
and still cant make sense of how this is supposed to work.
If someone could help me solve this error or explain how this is supposed to work I would be very happy to get some help. Thanks
What I want:
- send ajax to django rest framework api endpoint
- have django / DRF save many-to-many related data in postgreSQL db
What I’ve got:
TypeError: Session() got an unexpected keyword argument ‘pose_list’
models.py
class Pose(models.Model): name = models.CharField(max_length=100, blank=False, default='') def __str__(self): return self.name class SeshPoseList(models.Model): order = models.PositiveIntegerField() pose_fk = models.ForeignKey(Pose, on_delete=models.CASCADE) class Session(models.Model): session_name = models.CharField(max_length=100, blank=False, default='') def __str__(self): return self.name
serializers.py
class PoseSerializer(serializers.ModelSerializer): class Meta: model = Pose fields = ('id', 'name') class SeshPoseListSerializer(serializers.ModelSerializer): def create(self, validated_data): return Session.objects.create(**validated_data) class Meta: model = SeshPoseList fields = ['order', 'pose_fk'] class SessionSerializer(serializers.ModelSerializer): pose_list = SeshPoseListSerializer(many=True) def create(self, validated_data): return Session.objects.create(**validated_data) class Meta: model = Session fields = ('id', 'session_name', 'pose_list')
views.py
@api_view(['GET', 'POST', 'PUT', 'DELETE']) def session_list(request): if request.method == 'POST': seshSerializer = SessionSerializer(data=request.data) if seshSerializer.is_valid(): seshSerializer.create(seshSerializer.validated_data) return Response(seshSerializer.data, status=status.HTTP_201_CREATED) print("sesh errors ---> ", seshSerializer.errors) return Response(seshSerializer.errors, status=status.HTTP_400_BAD_REQUEST)