我的模型.py:
from django.db import models
# Create your models here.
class Email(models.Model):
id = models.AutoField(primary_key=True)
sender = models.CharField(max_length=100)
receiver = models.CharField(max_length=100)
message = models.TextField()
我的序列化器.py:
from django.forms import widgets
from rest_framework import serializers
from email_app.models import Email
class EmailSerializer(serializers.ModelSerializer):
class Meta:
model = Email
fields = ('id', 'sender', 'receiver', 'message')
我的观点.py:
@api_view(['POST'])
def email_list(request):
serializer = EmailSerializer(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)
当我发送这样的 POST 请求时:
curl -X POST http://127.0.0.1:8000/email/new/ -d "{'sender': 'a@b', 'receiver':'c@d', 'message':''yolo'}"
我收到这个错误:
{"message": ["This field is required."], "sender": ["This field is required."], "receiver": ["This field is required."]}
我做错了什么?
最佳答案
DRF 需要 Content-Type
header 来为您的数据找到正确的解析器。
尝试将 -H "Content-Type:application/json"
添加到您的 curl 调用中。
另请注意,您使用的单引号 ('
) 不是有效的 JSON。 JSON 只允许双引号 ("
)。
所以你正确的 curl-call 应该是
curl -X POST http://127.0.0.1:8000/email/new/-H "Content-Type: application/json"-d '{"sender": "a@b", "receiver":"c@d", "message":"yolo"}'
关于python - Django Rest 框架字段是必填错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24074089/