django - 从 Angular 前端在 Django Rest Framework 3.0 中保存上传的文件时出现问题

标签 django angularjs django-rest-framework

我正在尝试使用 Angular 插件保存上传到 Django Rest Framework 3.0 API 的文件 ng-file-upload 。这是 Angular 中非常流行的插件,由于浏览器纯度的原因,上传时非常痛苦。

该插件要求文件在 header 中称为"file",因此在 Django 端,我尝试将该"file"与模型中的正确字段关联起来,该字段恰好是“照片”。

我正在尝试使用 DRF 的新 perform_update Hook 将上传的"file"复制到“照片”字段。但是,唉,我做不到。要么我的Python在一些非常基本的层面上是错误的(这是可能的答案),要么perform_update Hook 中的序列化器对象是只读的,或者其他什么。我对序列化器对象所做的任何事情似乎都没有产生任何影响,并且我无法保存文件。

顺便说一句,我可以使用 DRF 自己的 Web 界面很好地保存文件。只是不是用我自己的 Angular 应用程序。

相关 Django:

class Entity(models.Model):
  name = models.CharField("Entity Name", max_length=100, unique=True)
  description = models.TextField(blank=True)
  photo = models.ImageField(blank=True,upload_to='entity_images')

class EntityViewSet(UnCachedModelViewSet):
  queryset = Entity.objects.all().order_by('name')
  filter_fields = ('user','slug')
  # parser_classes = (MultiPartParser,) #makes no difference

  def perform_update(self, serializer):
    if 'file' in self.request.data:
        serializer.data['photo'] = self.request.data['file']
        print('SERIALIZER: ',serializer.data) #for test purposes only
    serializer.save()

无论我对serializer.data做什么,当我在下一行中打印它时,它看起来都是一样的,就好像它是只读的或者什么的。无论如何,文件永远不会保存到照片字段。

我的做法是错误的吗?如何使用perform_update

PS Angular=>Django 文件上传难题的基本方法来自 here ,但该解决方案中使用的 DRF pre_save Hook 已被最新版本的 DRF 中的 perform_update 取代,如 here 所示。 .

附加包括工作答案:

def perform_update(self, serializer):
    if 'file' in self.request.data:
        serializer.save(photo= self.request.data['file'])
    else:
        serializer.save()

最佳答案

试试这个:

serializer.save(photo=self.request.data['file'])

请告诉我......

关于django - 从 Angular 前端在 Django Rest Framework 3.0 中保存上传的文件时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30011992/

相关文章:

python - 将 LetsEncrypt/Certbot 与 Django 开发服务器一起使用?

javascript - AngularJS:删除 Aria 属性

python - Django REST Framework 如何将上下文添加到 ViewSet

python - 使用嵌套对象在 ModelViewSet 上发布 Django Rest Framework

python - 如何修复 Django Rest API 错误?

python - Django Rest框架serializer.save()返回 "Invalid data. Expected a dictionary, but got group"

Django 1.8.2 : Error creating new content types

javascript - Angular 2 应用程序不加载 html 中的 JS 脚本

javascript - TypeScript - 她一定要拥有它? (它 == 全局范围)

django - 捕获 django rest 框架中的所有异常