发布到 Django 休息框架

新手上路,请多包涵

我想使用 post 发布到我的 Django 服务器,这样我就可以添加一个 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

和序列化器:

 class TodoSerializer(serializers.ModelSerializer):
    class Meta:
        model = Todo
        fields = ("id", 'title','text', 'completed', 'created_at')

并查看:

 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)

我的发帖请求是

{ "title": "new title",
  "text": "a test text"}

它告诉我

IntegrityError at /todos/
(1048, "Column 'title' cannot be null")

作为 Django 的新手,我不明白这个错误。有任何想法吗?

原文由 Shukai Ni 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 427
1 个回答

您需要访问 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)

原文由 zaidfazil 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题