I am trying to send a List / array using multipart/form-data.
The ModelSerializerdefines that field using
class RequestSerializer(serializers.ModelSerializer):
# ...
in_categories = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
the Model field is defined as
class Request(models.Model):
# ....
in_categories = models.ManyToManyField(to='Category',
through='RequestToCategory',
blank=False)
now, I got a ModelViewSet
defined as follows:
class RequestViewSet(viewsets.ModelViewSet):
# ...
def create(self, request, *args, **kwargs):
print(request.data)
serializer = self.get_serializer(data=request.data)
print(serializer.is_valid(raise_exception=True))
print(serializer.validated_data)
However, the in_categories field never gets populated with actual data, nor does the validator raise an exception when called.
I did not find any way to transmit the data in a way the field actually gets a list of keys as defined. I tried three things:
- Sending the data as literal resulting in
request.data = <QueryDict: { ... 'in_categories': ['[2, 3]'] ... - Sending the data as array resulting in
request.data = <QueryDict: { ... 'in_categories[0]': ['2'], in_categories[1]': ['3'] ... - Sending the data as array with extra key resulting in
request.data = <QueryDict: { ... 'in_categories[0]id': ['2'], in_categories[1]id': ['3'] ...
Each solution (i) arrives at the ViewSet, (ii) validates correctly but does (iii) not reflect into serializer.validated_data.
Do I miss something? I spent already hours on this, finding no solution on how to make DRF understand what I want.