我无法在此ImageField中保存图像.

when sending data back:

{
    "image": ["No file was submitted. Check the encoding type on the form."]
}

model.py

class MyPhoto(models.Model):
    owner = models.ForeignKey('auth.User', related_name='image')
    image = models.ImageField(upload_to='photos', max_length=254)

serializers.py

class PhotoSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = MyPhoto
        fields = ('url', 'id', 'image', 'owner')
        owner = serializers.Field(source='owner.username')

view.py

class PhotoList(APIView):
    permission_classes = (permissions.IsAuthenticatedOrReadOnly, IsOwnerOrReadOnly)

    def get(self, request, format=None):
        photo = MyPhoto.objects.all()
        serializer = PhotoSerializer(photo, many=True)
        return Response(data=serializer.data, status=status.HTTP_200_OK)

    def post(self, request, format=None):
       serializer = PhotoSerializer(data=request.DATA)
       if serializer.is_valid():
           serializer.save()
           return Response(serializer.data, status=status.HTTP_201_CREATED)
       return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    def pre_save(self, obj):
        obj.owner = self.request.user


class PhotoDetail(APIView):

    permission_classes = (permissions.IsAuthenticatedOrReadOnly, IsOwnerOrReadOnly)

    def get_object(self, pk):
        try:
            return MyPhoto.objects.get(pk=pk)
        except MyPhoto.DoesNotExist:
            raise Http404

    def get(self, request, pk, format=None):
        photo = self.get_object(pk)
        serializer = PhotoSerializer(photo)
        return Response(serializer.data)

    def put(self, request, pk, format=None):
        photo = self.get_object(pk)
        serializer = PhotoSerializer(photo, data=request.DATA)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    def delete(self, request, pk, format=None):
        photo = self.get_object(pk)
        photo.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)

    def pre_save(self, obj):
        obj.owner = self.request.user

url.py

urlpatterns = patterns('',
    url(r'^$', 'main.views.main_page'),
    url(r'^api/photo/$', views.PhotoList.as_view(), name='myphoto-list'),
    url(r'^api/photo/(?P<pk>[0-9]+)/$', views.PhotoDetail.as_view(), name='myphoto-detail'),)

curl

curl -X POST -S \
  -H 'Content-Type: application/json' \
  -u "michael:bush_pass" \
  --data-binary '{"owner":"/users/1/", \
    "image":"/Users/test/Downloads/1383310998_05.jpg"}' \
  127.0.0.1:8000/api/photo/

推荐答案

您的postput处理程序中似乎缺少序列化程序构造函数的request.FILES参数.

serializer = PhotoSerializer(data=request.DATA, files=request.FILES)

Django相关问答推荐

从Azure Web应用服务器上的cron任务的虚拟环境加载变量

如何在Django CMS中更新上下文

如何删除Docker上的django应用程序?

Django多对多关系报错:<title> object (None)>需要先设置id字段的值.

Django中的InvalidOperation错误[]

django.template.response.ContentNotRenderedError: 必须渲染响应内容才能迭代

基于令牌的身份验证如何工作?

如何在 Django 模板视图中显示我的数据?

在 Django 模板中呈现标签名称而不是整数字段

在用例图中建模前端和后端

初始填充 Django 表单

Django REST Framework ModelSerializer get_or_create 功能

TestCase 类中的 setUpClass、setUpTestData 和 setUp 有什么区别?

测试 Django ModelForm 是否有实例

Django 模板列表的第一个元素

Django:显示在每个页面上加载页面所花费的时间

在 Django 中舍入小数点

Django unique=True 不工作

BASE DIR 的绝对路径是什么?

ImportError:没有名为 django_filters 的模块