【发布时间】:2020-03-17 07:16:51
【问题描述】:
我正在使用 Django Rest 框架执行一个 API 项目。
我有一个按以下方式定义的 Django 模型:
class Profile(CreatedUpdatedModel, models.Model):
owner = models.ForeignKey(Owner, models.CASCADE)
start_date = models.DateField(gettext_lazy("Start"), help_text=gettext_lazy("YYYY-MM-DD format"))
end_date = models.DateField(gettext_lazy("End"), help_text=gettext_lazy("YYYY-MM-DD format"))
category = models.ManyToManyField(OwnerCategory)
tags = models.ManyToManyField(OwnerTag)
我从传递 JSON 数据的网页执行 POST API 调用,如下所示:
{start_date: '2019-11-20' , end_date: '2019-11-21', owner: '65', category: '[20, 21, 22]', tags: '[]' }
我想将带有我通过 JSON 传递的参数的模型保存在数据库中
这是我在 views.py 中的 REST 视图:
@permission_required()
class ProfileViewSet(ViewSet):
@action(detail=False, methods=['post'])
def new_profile(self, request, pk=None):
serializer = serializers.ProfileSerializer(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)
这是我在 serializers.py 中的 REST 序列化程序
class ProfileSerializer(ModelSerializer):
class Meta:
model = Profile
fields = ('owner', 'start_date', 'end_date', 'category', 'tags', )
问题在于声明serializer.is_valid() 是False。
这段代码我哪里错了?
有人可以帮我吗?
-----编辑 ----
我查看了serializer.errors,这是输出:
{'owner': [ErrorDetail(string='This field is required.', code='required')], 'category': [ErrorDetail(string='Expected a list of items but got type "str".', code='not_a_list')], 'tags': [ErrorDetail(string='This field is required.', code='required')]}
我还看了request.data我看到字典包含了我通过API传递的所有数据
【问题讨论】:
-
你应该看看
serializer.errors。 -
感谢您的回复,我编辑了报告
serializer.errors输出的答案。 -
你还不清楚吗?您正在发送错误的数据,您的代码没有问题。
标签: json django post django-models django-rest-framework