1
我想讓它可以上傳文件和文本到我的服務器端點。Django Rest Framework說沒有提供輸入?
下面是捲曲的例子後,我希望能有工作:
curl -X POST https://mydomain.com/myapp/ -u user:pass -F "body=test" -F "[email protected]/Users/myaccount/myproject/eyecon.png"
問題是,當我運行它,我得到這個錯誤信息:
{"non_field_errors": ["No input provided"]}
我通過看Django Rest框架代碼,它僅從一個位置生成此錯誤消息,這是用於處理request.DATA
和request.FILES
都爲空/缺失的情況。所以我懷疑我的問題是在配置文件中的某處(可能是Apache,Django或Django Rest Kit的配置,我搞砸了)。我希望有人會告訴我,我在某處丟失了一行,這將是一個快速和簡單的修復。
但只是櫃面它不是一個配置的問題,它實際上是我的代碼的問題,這裏是我所有的代碼與此相關:
views.py
class MessageList(generics.ListCreateAPIView):
permission_classes = (IsAuthenticatedOrReadOnly,)
queryset = Message.objects.all()
serializer_class = MessageSerializer
def pre_save(self, obj):
obj.owner = self.request.user
串行的.py
class MessageSerializer(serializers.ModelSerializer):
owner = serializers.Field(source='owner.username')
def __init__(self, instance=None, data=None, files=None,
context=None, partial=False, many=None,
allow_add_remove=False, **kwargs):
super(MessageSerializer, self).__init__(**kwargs)
for attachment in files.getlist('file', []):
Attachment(target=id, file=attachment).save()
class Meta:
model = Message
fields = ('id', 'owner', 'title', 'created', 'body')
models.py
class Message(models.Model):
created = models.DateTimeField(auto_now_add=True)
title = models.CharField(max_length=100, blank=True, default='')
body = models.TextField()
owner = models.ForeignKey('auth.User', related_name='messages')
class Meta:
ordering = ('created',)
class Attachment(models.Model):
target = models.ForeignKey('server_app.Message', related_name='attachments')
theFile = models.FileField(upload_to='attachments/')
你不想同時省略「自我」使用提供給MessageSerializer的參數,而不是重複使用默認的?像這樣:super(MessageSerializer,self).__ init __(instance,data,files,context,partial,many,allow_add_remove,** kwargs) –
@ user640916 - 是的,您是對的。這不是我項目中的實際代碼(由NDA覆蓋)。在我的匿名過程中,我偶然寫了一些沒有多大意義的代碼。我編輯了我的答案來解決這個問題。 – ArtOfWarfare