我创建了一个带有ImageField的简单模型,并且我想使用django-rest-framework + django-rest-swagger创建一个文档化的api视图,可以上传文件。
以下是我的代码:
models.py
from django.utils import timezone
from django.db import models
class MyModel(models.Model):
source = models.ImageField(upload_to=u'/photos')
is_active = models.BooleanField(default=False)
created_at = models.DateTimeField(default=timezone.now)
def __unicode__(self):
return u"photo {0}".format(self.source.url)
serializer.py
from .models import MyModel
class MyModelSerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = [
'id',
'source',
'created_at',
]
views.py
from rest_framework import generics
from .serializer import MyModelSerializer
class MyModelView(generics.CreateAPIView):
serializer_class = MyModelSerializer
parser_classes = (FileUploadParser, )
def post(self, *args, **kwargs):
"""
Create a MyModel
---
parameters:
- name: source
description: file
required: True
type: file
responseMessages:
- code: 201
message: Created
"""
return super(MyModelView, self).post(self, *args, **kwargs)
urls.py
from weddings.api.views import MyModelView
urlpatterns = patterns(
'',
url(r'^/api/mymodel/$', MyModelView.as_view()),
)
对我来说,这应该很简单。但是,我无法使上传工作。我总是得到这个错误响应:
我已经阅读了来自django-rest-framework的文档的这部分内容:
如果使用FileUploadParser的视图与文件名URL关键字参数一起调用,则该参数将用作文件名。如果未使用文件名URL关键字参数进行调用,则客户端必须在Content-Disposition HTTP标头中设置文件名。例如Content-Disposition:attachment; filename = upload.jpg。
然而,Header被传递给Request Payload属性(从Chrome控制台)的django-rest-swagger。
如果需要更多信息,请告诉我。
我正在使用Django==1.8.8
,djangorestframework==3.3.2
和django-rest-swagger==0.3.4
。