【问题标题】:Post JSON data via API and create a related model in Django Rest Framework通过 API 发布 JSON 数据并在 Django Rest Framework 中创建相关模型
【发布时间】: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


【解决方案1】:

您发送的不是有效的 json 数据。这是你在 json 中的样子:

{
    "start_date": "2019-11-20",
    "end_date": "2019-11-21",
    "owner": 65,
    "category": [
        20,
        21,
        22
    ],
    "tags": []
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    • 2020-04-15
    • 2021-12-13
    • 1970-01-01
    • 2018-03-27
    • 2022-10-07
    • 1970-01-01
    相关资源
    最近更新 更多