使用
- Django Rest Framework 作为后端,使用 Angularjs 作为前端
后端
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__'
前端
Upload.upload({ method: 'PUT', url: api_url + '/' + data.id + '/' , data: data }).then(); Upload.upload({ method: 'POST', url: api_url + '/' + data.id + '/' , data: data }).then();
问题 当第一次上传图像时,它完成了,后端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)