Gro*_* Ni 5 python django post django-rest-framework
我想发布到我的Django服务器,post所以我可以添加一个todo项目.这是模型:
class Todo(models.Model):
title = models.CharField(max_length=200);
text = models.TextField()
completed = models.BooleanField(default=False)
created_at = models.DateTimeField(default=datetime.now, blank = True )
def __str__(self):
return self.title
Run Code Online (Sandbox Code Playgroud)
和序列化器:
class TodoSerializer(serializers.ModelSerializer):
class Meta:
model = Todo
fields = ("id", 'title','text', 'completed', 'created_at')
Run Code Online (Sandbox Code Playgroud)
并查看:
class TodoList(APIView):
def get(self,request):
todo=Todo.objects.all()
serializer=TodoSerializer(todo,many=True)
return Response(serializer.data)
def post(self,request):
Todo.objects.create(
title=request.POST.get('title'),
text=request.POST.get('text'))
return HttpResponse(status=201)
Run Code Online (Sandbox Code Playgroud)
我的帖子请求是
{ "title": "new title",
"text": "a test text"}
Run Code Online (Sandbox Code Playgroud)
它告诉我
IntegrityError at /todos/
(1048, "Column 'title' cannot be null")
Run Code Online (Sandbox Code Playgroud)
作为Django的新手,我不明白这个错误.有任何想法吗?
zai*_*zil 11
您需要访问request.data而不是request.POST,
def post(self,request):
serializer = TodoSerializer(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)
Run Code Online (Sandbox Code Playgroud)
您始终可以使用序列化器来实现相同的目的,而不是像这样创建
data_serializer = TodoSerializer(data=request.data)
if data_Serializer.is_valid():
data_Serializer.save()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20111 次 |
| 最近记录: |