ng-upload-file 和 django rest 框架使用 filefield 发布和更新数据


使用
  1. Django Rest Framework 作为后端,使用 Angularjs 作为前端
  2. 后端

    class ReleaseBugs(models.Model):
    bug_name = models.CharField(max_length=30)
    bug_image = models.ImageField(blank=True, null=True, upload_to='release_bugs/')
    class ReleaseBugsSerializer(serializers.ModelSerializer):
    class Meta:
    model = ReleaseBugs
    fields = '__all__'
    
  3. 前端

    Upload.upload({
    method: 'PUT',
    url: api_url + '/' + data.id + '/' ,
    data: data
    }).then();
    Upload.upload({
    method: 'POST',
    url: api_url + '/' + data.id + '/' ,
    data: data
    }).then();
    
  4. 问题 当第一次上传图像时,它完成了,后端bug_image转换为URL,而不是当我想修改数据(例如,bug_name(并再次发布时,这是被禁止的。 我有一个解决方案,当重新发布数据时,使用 ng-upload-file 将 url 转换为 blob

    Upload.urlToBlob($scope.release_bug.bug_image).then(function(blob) {
    $scope.release_bug.bug_image = blob;
    // do post
    });
    

    但是,这种方式只是上传具有不同文件名的相同图像。我认为这是浪费时间和空间。

我是新手,有没有更好的方法?

提出了一个解决方案,只需在视图集更新时进行更新,而不是使用serilizer

def update(self, request, *args, **kwargs):
request_bug_image = request.data['bug_image']
release_bug = ReleaseBugs.objects.get(pk=int(kwargs['pk']))
for key, value in request.data.iteritems():
if key == 'bug_image' and isinstance(request_bug_image, basestring):
continue
setattr(release_bug, key, value)
release_bug.save()
release_bug_serializer = ReleaseBugsSerializer(release_bug)
return Response(release_bug_serializer.data)

最新更新