Maybe this is related to the structure of DRF, but I still wanted to write it here.
I am sending data like this;
post_data={
"detail":"Address detail",
"address.address":"Street 10",
"address.lat":"10",
"address.lng":"10"
}
Here is the desired result:
{
"detail":"Address detail",
"address":{
"address":"Street 10",
"lat":"10",
"lng":10"
}
}
serializers.py
class ContentAddressSerializer(serializers.ModelSerializer):
class Meta:
model = ContentAddressModel
fields = ['address', 'lat', 'lng']
class ContentSerializer(serializers.ModelSerializer):
address = ContentAddressSerializer(required=False, allow_null=True)
class Meta:
model = ContentModel
fields = [ 'id', 'detail', 'address' ]
def to_internal_value(self, data):
#print("+" * 100, data)
d = super().to_internal_value(data)
#print("+" * 100, d) {"detail":"Address detail"} # no address!!
return d
But, in the to_inernal_vale() method of ContentSerializer, it comes out as follows;
{"detail":"Address detail"} # no address!!
The data from your parser is as follows;
<QueryDict: {'detail': ['Address detail'], 'address': [{"address":"Street 10", "lat":"10","lng":10"}]}
As seen QueryDict comes. As I said, maybe it is related to the structure of DRF.
It works fully when I extend your parse() method and make the following change;
class NesteMultipartParser(DrfNestedParser):
def parse(self, stream, media_type=None, parser_context=None):
data = super().parse(stream, media_type, parser_context)
dict_data = data.dict() #!!!!HERE!!!
return dict_data
here i changed the return value to dict