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
的值。