相关疑难解决方法(0)

Django REST Framework上传图片:"提交的数据不是文件"

我倾向于如何在Django中上传文件,在这里我遇到一个应该是微不足道的问题,错误:

提交的数据不是文件.检查表单上的编码类型.

以下是详细信息.


注意:我也查看了Django Rest Framework ImageField,我试过了

serializer = ImageSerializer(data=request.data, files=request.FILES)
Run Code Online (Sandbox Code Playgroud)

但我明白了

TypeError:__init__()得到一个意外的关键字参数'files'


我有一个Image模型,我想通过Django REST框架进行交互:

models.py

class Image(models.Model):
    image = models.ImageField(upload_to='item_images')
    owner = models.ForeignKey(
        User, related_name='uploaded_item_images',
        blank=False,
    )
    time_created = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)

serializers.py

class ImageSerializer(serializers.ModelSerializer):
    image = serializers.ImageField(
        max_length=None, use_url=True,
    )

    class Meta:
        model = Image
        fields = ("id", 'image', 'owner', 'time_created', )
Run Code Online (Sandbox Code Playgroud)

settings.py

'DEFAULT_PARSER_CLASSES': (
    'rest_framework.parsers.JSONParser',
    'rest_framework.parsers.FormParser',
    'rest_framework.parsers.MultiPartParser',
),
Run Code Online (Sandbox Code Playgroud)

前端(使用AngularJS和angular-restmod$resource)发送JSON与数据ownerimage下面的形式:

输入:

{"owner": 5, …
Run Code Online (Sandbox Code Playgroud)

python django angularjs django-rest-framework

39
推荐指数
2
解决办法
4万
查看次数

使用Angular中的其他字段发送FormData

我有一个有两个input text和一个的表格upload.我必须将它发送到服务器,但我有一些问题连接文件与文本.服务器期望这个答案:

"title=first_input" "text=second_input" "file=my_file.pdf"
Run Code Online (Sandbox Code Playgroud)

这是html:

<input type="text" ng-model="title">
<input type="text" ng-model="text">
<input type="file" file-model="myFile"/>
<button ng-click="send()">
Run Code Online (Sandbox Code Playgroud)

这是控制器:

$scope.title = null;
$scope.text = null;

$scope.send = function(){
  var file = $scope.myFile;
  var uploadUrl = 'my_url';
  blockUI.start();
  Add.uploadFileToUrl(file, $scope.newPost.title, $scope.newPost.text, uploadUrl);
};
Run Code Online (Sandbox Code Playgroud)

这是指令 fileModel:

  return {
restrict: 'A',
link: function(scope, element, attrs) {
  var model = $parse(attrs.fileModel);
  var modelSetter = model.assign;

  element.bind('change', function(){
    scope.$apply(function(){
      modelSetter(scope, element[0].files[0]);
    });
  });
}
};
Run Code Online (Sandbox Code Playgroud)

这就是服务 …

http multipartform-data form-data http-post angularjs

28
推荐指数
2
解决办法
8万
查看次数

Django Rest Framework将文件上传到方法

所以我一直试图将文件上传到使用DRF的方法到目前为止没有运气.

我能够上传到没有问题的ModelViewSet使用(FormParser, MultiPartParser,),但我真的需要在这样的http://localhost:8000/api/v1/women/{pk}/upload_avatar/地方使用它,我想先通过id过滤女人并上传到她的头像(这是多媒体模型的外键).我尝试使用嵌套资源库而没有运气.

到目前为止我在我的modelviewset中:

class WomenNativePassportViewSet(viewsets.ModelViewSet):
    queryset = Women.objects.all()
    serializer_class = WomenNativePassportSerializer
    authentication_classes = (NoAuthentication,)
    permission_classes = (AllowAny,)
    parser_classes = (FormParser, MultiPartParser,)

    @detail_route(
        methods=['post', 'put', 'patch', 'get'], permission_classes=[AllowAny],
        authentication_classes=[NoAuthentication], serializer_class=MultimediaSerializer,
        parser_classes=(FormParser, MultiPartParser,)
    )
    def upload_avatar(self, request, pk=None, *args, **kwargs):
        if 'POST' in request._method or 'PATCH' in request._method:
            # Write code to save the file??
        else:
            multimedia = Multimedia.objects.filter(user_profiles_avatares__pk=pk)
            page = self.paginate_queryset(multimedia)
            serializer = self.get_pagination_serializer(page)
        return Response(serializer.data)
Run Code Online (Sandbox Code Playgroud)

我的模特:

class Women(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL)
    avatar = …
Run Code Online (Sandbox Code Playgroud)

python django django-rest-framework

8
推荐指数
1
解决办法
1万
查看次数