【问题标题】:Django REST, uploaded image has null valueDjango REST,上传的图像具有空值
【发布时间】:2016-06-24 14:01:03
【问题描述】:

我在前端有一个简单的应用程序,带有 Django REST 和 Angular,但我在上传图片时遇到了问题。
我的模型:

class Photo(models.Model):

    img = models.ImageField(upload_to='photos/', max_length=254)
    text = models.CharField(max_length=254, blank=True)

当我通过表单发送图像时,文本上传良好,但图像具有空值。
浏览器响应:

{"img":null,"text":"test"}

这里是我上传图片时打印的self.data.request

QueryDict: {'text': ['test'], 'InMemoryUploadedFile: filename.jpg (image/jpeg)]}

序列化器很简单 ModelSerializer 有两个模型字段。
查看:

class PhotoViewSet(viewsets.ModelViewSet):

    queryset = Photo.objects.all()
    serializer_class = PhotoSerializer
    parser_classes = (MultiPartParser, FormParser)

    def perform_create(self, serializer):
        serializer.save(img=self.request.data.get('file'))

photo_router = DefaultRouter()
photo_router.register(r'photo', PhotoViewSet)

图片上传我使用lib ng-file-upload,我尝试了另一种上传方式,图片也是空的。
角码:

var app = angular.module('myApp', ['ngRoute', 'ngFileUpload']);

app.config(function ($routeProvider) {

    $routeProvider
         .when('/', {
            templateUrl: 'http://127.0.0.1:8000/static/js/angular/templates/home.html'
    })
});
app.config(['$httpProvider', function($httpProvider) {
    $httpProvider.defaults.xsrfCookieName = 'csrftoken';
    $httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';
}]);
app.controller('MyCtrl', ['$scope', 'Upload', '$timeout', function($scope, Upload, $timeout) {
    $scope.uploadPic = function(file) {
    file.upload = Upload.upload({
        url: '/api/photo/',
        data: {text: $scope.text, img: file},
    });

    file.upload.then(function (response) {
      $timeout(function () {
        file.result = response.data;
      });
    }, function (response) {
      if (response.status > 0)
        $scope.errorMsg = response.status + ': ' + response.data;
    }, function (evt) {
      file.progress = Math.min(100, parseInt(100.0 * evt.loaded / evt.total));
    });
    }
}]);

【问题讨论】:

    标签: javascript angularjs django file-upload django-rest-framework


    【解决方案1】:

    您正在发布此 json data: {text: $scope.text, img: file},但在 perform_create 方法中您调用 self.request.data.get('file')。我认为您必须将其更改为

    serializer.save(self.request.data.get('img'))
    

    【讨论】:

      猜你喜欢
      • 2019-09-01
      • 2018-08-17
      • 1970-01-01
      • 2016-03-23
      • 2018-03-12
      • 1970-01-01
      • 1970-01-01
      • 2021-02-19
      • 2018-01-17
      相关资源
      最近更新 更多