django 2.1 rest上传文件并获取最终url

django 2.1 rest上传文件并获取最终url,django,Django,我想在django rest_框架中上传文件,我当前的代码是: class get_contract_events_log(APIView): authentication_classes = (BearerTokenAuthentication,) permission_classes = (permissions.IsAuthenticated,) parser_classes = (JSONParser, FormParser, MultiPartParser,)

我想在django rest_框架中上传文件,我当前的代码是:

class get_contract_events_log(APIView):
    authentication_classes = (BearerTokenAuthentication,)
    permission_classes = (permissions.IsAuthenticated,)
    parser_classes = (JSONParser, FormParser, MultiPartParser,)

    def post(self, request, contract_id, format=None):

        screenshot_file       = request.FILES["screenshot_file"]
        mouse_event_count     = request.data["mouse_events_count"]
        keyboard_events_count = request.data["keyboard_events_count"]

        contract = Contract.objects.get(id=contract_id)

        # file_serializer = FileSerializer(data=request.FILES)
        # if file_serializer.is_valid():
        #     file_serializer.save()

        ContractEvent.objects.create(
            #....
            screenshot_filename=screenshot_file,
            screenshot_url="https://upload.wikimedia.org/wikipedia/commons/5/57/Bootstrap-3.1.1-screenshot-jumbotron-example.png",
        )

        return JsonResponse({"message":"log successfully created"}, status=201)
序列化程序:

class FileSerializer(serializers.ModelSerializer):
  class Meta():
    model = ContractEvent
    fields = ('screenshot_file')
我当前的代码返回错误:

TypeError: The `fields` option must be a list or tuple or "__all__". Got str.
[27/Oct/2018 15:04:25] "POST /contracts/3/events/log HTTP/1.1" 500 18899
如何修复此错误?我需要将屏幕截图\u url替换为上载文件的路径。

您的

class FileSerializer(serializers.ModelSerializer):
  class Meta():
    model = ContractEvent
    fields = ('screenshot_file')
正确的

class FileSerializer(serializers.ModelSerializer):
  class Meta():
    model = ContractEvent
    fields = ('screenshot_file',)
在“屏幕截图文件”之后添加,无括号。然后再把你的问题贴出来。