Django不使用post保存数据

zqdjd7g9  于 2023-10-21  发布在  Go
关注(0)|答案(1)|浏览(90)

我有这样的看法:

class TaskApiView(APIView):
    def post(self, request):
        serializer = TaskSerializer(data=request.data)
        print(request.data)
        if serializer.is_valid():
            print("valid", serializer.data)
            serializer.save()
            return Response(status=status.HTTP_201_CREATED)
        else:
            print(serializer.errors)
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

请求正文:

{
    "content": "asd"
}

记录:

{'content': 'asd'}
valid {'id': 30}
[21/Oct/2023 11:33:19] "POST /api/task/create HTTP/1.1" 201 0

但是当我尝试用这个视图获取所有任务时

class TaskListAPIView(generics.ListAPIView):
    queryset = Task.objects.all()
    serializer_class = TaskSerializer

我得到的只是ID:

[
    {
        "id": 25
    }
]

串行化器:

class TaskSerializer(serializers.ModelSerializer):
    class Meta:
        model = Task
        fields = "__all__"

模型

id: models.UUIDField(unique=True, auto_created=True)
    content: models.CharField(default="")
    creationDate: models.DateField(auto_now_add=True)
    author: models.ForeignKey(User, on_delete=models.CASCADE)
    status: models.CharField(
        choices=StatusEnum,
        max_length=5,
        default=StatusEnum.TODO,
    )

    def __str__(self):
        return self.id + self.content

settings.py:

REST_FRAMEWORK = {
    "DEFAULT_PARSER_CLASSES": [
        "rest_framework.parsers.JSONParser",
    ]
}

我想创建一个任务内容

9jyewag0

9jyewag01#

这是因为你的模型只有一个id字段。事实上,您将字段定义为属性,而不是注解,因此:

class Task(models.Model):
    id = models.UUIDField(unique=True, auto_created=True)
    content = models.CharField(default='')
    creationDate = models.DateField(auto_now_add=True)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    status = models.CharField(
        choices=StatusEnum, max_length=5, default=StatusEnum.TODO
    )

    def __str__(self):
        return f'{self.id} {self.content}'

您将需要进行迁移和迁移以正确地迁移它。可能会为现有模型注入默认值。
然而,对于您提供的给定数据,序列化程序将拒绝数据:你没有为author指定一个值。

相关问题