Django 不保存post数据

Django 不保存post数据

问题描述

我有这个视图:

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",
    ]
}

我想创建一个带内容的任务

解决方案

嗯,这是因为您的模型只有一个 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的值。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程