如何使用插入多个记录

2024-05-15 22:39:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个小项目,Django Rest框架,我已经创建了add contact函数,您可以在我的create函数中看到这一点。现在我正在进行批量导入,但当我以列表而不是以目录的形式提交数据时,会收到一条错误消息:

{"non_field_errors":["Invalid data. Expected a dictionary, but got list."]}

这是我添加联系人的代码

class ContactView(ListModelMixin, viewsets.GenericViewSet):
    queryset = Contact.objects.all()
    serializer_class = ContactSerializer

    def create(self, request):
        serializeObject = ContactSerializer(data = request.data)
        if serializeObject.is_valid():
            serializeObject.save()
            contactObject = Contact.objects.all()
            contactSerializer = ContactSerializer(contactObject, many=True)
            return Response(contactSerializer.data, status = status.HTTP_201_CREATED)
        return Response(serializeObject.errors, status.HTTP_400_BAD_REQUEST)

现在我想为批量创建创建另一个函数,因为我有一个列表

这是我的标题数据结构:

[{"Greeting":"amine","first_name":"alain","last_name":"amine","title":"ricardo","language":"ab@xyz.com","email":43822510594,"phone_1":43822510594,"phone_2":"not yet","mobile":43822510594,"fax":"not yet","internal_id":"xname"},{"Greeting":"bill","first_name":"microsoft","last_name":"bill","title":"microsoft","language":"bill@microsoft.com","email":652565455,"phone_1":652565455,"phone_2":"new york","mobile":652565455,"fax":"new york","internal_id":"microsoft"},{"Greeting":"john","first_name":"Yoyo","last_name":"Ruth","title":"xnameagain","language":"rh@xyz.com","email":5465559852,"phone_1":5465559852,"phone_2":"Vancouver","mobile":5465559852,"fax":"Vancouver","internal_id":"yname"}]

这是我的序列化程序:

class ContactSerializer(serializers.ModelSerializer):
    class Meta:
        model = Contact
        fields = "__all__"

Tags: 函数namedatatitlestatuscontactphoneall
2条回答

我在https://www.django-rest-framework.org/api-guide/serializers/#dealing-with-multiple-objects上找到了解决方案

我所要做的就是添加many=True来创建多个对象

serializeObject = ContactSerializer(data = request.data, many=True)

创建方法应如下所示:

class ContactView(ListModelMixin, viewsets.GenericViewSet):
    queryset = Contact.objects.all()
    serializer_class = ContactSerializer

    def create(self, request):
        valid_objects = []
        for data in request.data:
            serializeObject = ContactSerializer(data=data)
            if serializeObject.is_valid():
                valid_objects.append(serializeObject)
            else:
                return Response(serializeObject.errors, status.HTTP_400_BAD_REQUEST)
        for obj in valid_objects:
            obj.save()
        contactObject = Contact.objects.all()
        contactSerializer = ContactSerializer(contactObject, many=True)
        return Response(contactSerializer.data, status = status.HTTP_201_CREATED)

建议

  • 它们可能不是最佳实践,但确实有效

相关问题 更多 >