【问题标题】:File uploader is not showing in Swagger Django Rest-FramworkSwagger Django Rest-Framework 中未显示文件上传
【发布时间】:2020-07-13 20:49:59
【问题描述】:

我使用 Django rest-framework 创建了 Rest API,当我尝试使用 Swagger 进行测试时,它不支持 FileField。代替文件上传器,它显示文本字段。

我做了什么 -

models.py

class Document(models.Model):
    IS_DELETED = (
        (True, True),
        (False, False),
    )

    project = models.ForeignKey(Project, null=False, blank=False, on_delete=models.CASCADE)
    document_file = models.FileField(upload_to=PROJECT_DOC_PATH, null=False, blank=False)
    is_deleted = models.BooleanField(choices=IS_DELETED, default=False)
    created_by = models.CharField(max_length=500, null=True, blank=True)
    created_on = models.DateTimeField(null=False, blank=False, default=timezone.now)
    updated_by = models.CharField(max_length=500, null=True, blank=True)
    updated_on = models.DateTimeField(null=True, blank=True)

serializers.py

class DocumentSerializer(serializers.ModelSerializer):

    class Meta:
        model = DocumentTbl
        fields = ('project','document_file')

views.py

@method_decorator(csrf_exempt, name='dispatch')
class Document(generics.CreateAPIView):
    renderer_classes = (JSONRenderer,)
    parser_classes = (FormParser, MultiPartParser,)
    permission_classes = (permissions.AllowAny, IsAuthenticated)
    serializer_class = DocumentSerializer    

    def post(self, request):
        try:
            serializer = DocumentSerializer(data=request.data)
            if serializer.is_valid():
                serializer.create(serializer.validated_data)
                return Response({
                    messages.RESULT: messages.SUCCESS,
                    messages.MESSAGE: messages.SUCCESSFULLY_DATA_SAVE,
                }, status=status.HTTP_200_OK)
            else:
                return Response({
                    messages.RESULT: messages.FAIL,
                    messages.RESPONSE_DATA: serializer.errors,
                    messages.MESSAGE: messages.INVALID_DATA,
                }, status=status.HTTP_400_BAD_REQUEST)
        except Exception as ex:
            return Response({
                messages.RESULT: messages.FAIL,
                messages.MESSAGE: messages.SERVER_ERROR + ', due to {}'.format(str(ex)),
            }, status=status.HTTP_500_INTERNAL_SERVER_ERROR)

urls.py

urlpatterns = [
    path('document/', Document.as_view(),name='document'),
]

req.txt

Python==3.x
Django==2.2.5
django-cors-headers==3.1.0
django-rest-swagger==2.2.0
djangorestframework==3.10.3
djangorestframework-simplejwt==4.3.0

我尝试过Django REST Framework + Django REST Swagger + ImageField,但没有解决我的问题。

输出

【问题讨论】:

    标签: python django django-rest-framework swagger swagger-2.0


    【解决方案1】:

    这是 Django-Rest-Swagger 的一个已知问题

    您可以参考以下网址: https://github.com/marcgibbons/django-rest-swagger/issues/647

    根本原因是 Core api 还没有 File 类型,它被标记为 # LATER: File

    https://github.com/core-api/python-coreschema/blob/master/coreschema/schemas.py#L24

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-29
      • 1970-01-01
      • 2014-06-05
      • 1970-01-01
      • 2015-11-29
      • 2017-07-17
      • 2022-12-03
      相关资源
      最近更新 更多