Drf-yasg: drf_yasg.errors.SwaggerGenerationError: cannot instantiate nested serializer as Parameter

Created on 30 Nov 2019  路  2Comments  路  Source: axnsan12/drf-yasg

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')

Most helpful comment

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()

All 2 comments

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.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

agethecoolguy picture agethecoolguy  路  4Comments

phihag picture phihag  路  3Comments

Safrone picture Safrone  路  3Comments

phihag picture phihag  路  5Comments

geekashu picture geekashu  路  5Comments