I'm trying to upload a file from 'drf-yasg' but in model its showing readonly true.
if i use parser_classes = (MultiPartParser,) in my viewset then getting cannot instantiate nested serializers as Parameter.Please give me some hint to resolve this issue.
Sample code:
views.py
class RequesterViewSet(viewsets.ModelViewSet):
"""
list of departments
"""
queryset = Requester.objects.all()
parser_classes = (MultiPartParser,)
serializer_class = RequesterSerializer
serializers.py
class RequesterSerializer(serializers.ModelSerializer):
files = serializers.FileField(source='requester_files', read_only=False)
class Meta:
model = Requester
fields = ('id', 'request_type', 'requested_person', 'on_behalf_of', 'project','files')
models.py
class Requester(TrackerModel):
created_date = models.DateTimeField(auto_now_add=True)
request_type = models.CharField(choices=REQUEST_TYPE, default='Items', max_length=10)
requested_person = models.ForeignKey(MyUser, related_name='requested_person', on_delete=models.PROTECT)
class RequesterFile(TrackerModel):
file = models.FileField(upload_to="files/requester/%Y/%m/%d")
requester = models.ForeignKey(Requester, on_delete=models.PROTECT, related_name='requester_files')
It seems to be a problem with parser classes so try to add to you view following code:
def get_parsers(self):
if getattr(self, 'swagger_fake_view', False):
return []
return super().get_parsers()
Representing arrays of files is not doable with OpenAPI 2.0 restrictions. You should probably just exclude your view from the swagger doc, or apply @dzbrozek's suggestion which will render the files field as read-only.
Most helpful comment
It seems to be a problem with parser classes so try to add to you view following code: