Cal*_*leb 5 django rest http django-rest-framework
我正在使用 DRF 尝试发出 PUT 请求来更新数据库中的文件。
我确实收到了标题中看到的错误Invalid data. Expected a dictionary, but got {datatype}.。
全文是这样的(serializer.error_messages):
{
"required": "This field is required.",
"null": "This field may not be null.",
"invalid": "Invalid data. Expected a dictionary, but got {datatype}."
}
Run Code Online (Sandbox Code Playgroud)
我在终端中没有看到任何其他有用的信息,仅此而已。
我的模型是这样的:
from django.db import models
class File(models.Model):
name = models.CharField(max_length=1024)
upload_timestamp_date = models.DateField(auto_now_add=True)
upload_timestamp_time = models.TimeField(auto_now_add=True)
file = models.FileField()
def __str__(self):
return self.name
Run Code Online (Sandbox Code Playgroud)
我的序列化器是这样的:
from rest_framework import serializers
from .models import File
class FileSerializer(serializers.ModelSerializer):
class Meta:
model = File
fields = '__all__'
Run Code Online (Sandbox Code Playgroud)
到目前为止我的观点是这样的:
@api_view(['GET', 'PUT', 'DELETE'])
@csrf_exempt
def file(request, file_id, format=None):
try:
data = File.objects.get(pk=file_id)
except File.DoesNotExist:
return Response(status=status.HTTP_404_NOT_FOUND)
if request.method == 'GET':
serializer = FileSerializer(data)
return Response({'file': serializer.data}, status=status.HTTP_200_OK)
elif request.method == 'PUT':
serializer = FileSerializer(data, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.error_messages, status=status.HTTP_400_BAD_REQUEST)
Run Code Online (Sandbox Code Playgroud)
归根结底是调用is_valid()是错误的,并带有这些错误消息。
我知道 GET 请求返回如下数据:
{
"file": {
"id": 1,
"name": "test",
"upload_timestamp_date": "2022-04-16",
"upload_timestamp_time": "17:02:56.790144",
"file": "https://files-learning.s3.amazonaws.com/akash_nemw.jpg"
}
}
Run Code Online (Sandbox Code Playgroud)
我已经在正文中提交了这些数据(仅更改了name):
{
"id": 1,
"name": "testing change",
"upload_timestamp_date": "2022-04-16",
"upload_timestamp_time": "17:02:56.790144",
"file": "https://files-learning.s3.amazonaws.com/akash_nemw.jpg"
}
Run Code Online (Sandbox Code Playgroud)
请,任何帮助将不胜感激,我花了一天时间试图找出提交的数据有什么问题。
解决方案(如评论中所建议的)是将 替换error_messages为errors. 我不确定我从哪里得到了这个想法error_messages,但这是一个小错误,导致了很多挫败感。
这导致了错误,我实际上需要使用文件下拉列表在Postman 的表单数据The submitted data was not a file. Check the encoding type on the form.部分中定义请求。这使我能够从计算机中选择一个文件,而不是重复使用相同的 S3 URL。
| 归档时间: |
|
| 查看次数: |
3707 次 |
| 最近记录: |