Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用插入多个记录_Python_Django_Django Rest Framework - Fatal编程技术网

Python 如何使用插入多个记录

Python 如何使用插入多个记录,python,django,django-rest-framework,Python,Django,Django Rest Framework,我正在做一个小项目,Django Rest框架,我已经创建了add contact函数,您可以在我的create函数中看到这一点。现在我正在进行批量导入,但当我以列表而不是以目录的形式提交数据时,会收到一条错误消息: {"non_field_errors":["Invalid data. Expected a dictionary, but got list."]} 这是我添加联系人的代码 class ContactView(ListModelMixin

我正在做一个小项目,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__"

创建方法应如下所示:

class ContactView(ListModelMixin,ViewSet.GenericViewSet):
queryset=Contact.objects.all()
serializer\u class=ContactSerializer
def创建(自我,请求):
有效的_对象=[]
对于request.data中的数据:
serializeObject=ContactSerializer(数据=数据)
如果序列化对象。是否有效()
有效的\u对象。追加(序列化对象)
其他:
返回响应(serializeObject.errors,status.HTTP\U 400\U BAD\U请求)
对于有效_对象中的obj:
obj.save()
contactObject=Contact.objects.all()
contactSerializer=contactSerializer(contactObject,many=True)
返回响应(contactSerializer.data,status=status.HTTP\u 201\u已创建)
劝告
  • 它们可能不是最佳实践,但确实有效
我在上找到了解决方案

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

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

这回答了你的问题吗@Tiki我必须扩展ModelSerializer吗?不,但也许您应该避免在这个创建方法中使用序列化程序,并迭代列表和每个dict验证/创建对象。@Tiki示例有点复杂:),您能根据我的代码给我一个示例吗please@Tiki我应该创建一个新的序列化程序吗?不起作用:(我得到了“first_name”:[“此字段是必需的。”]由于不是空的,您可以发布接收到的数据和序列化程序类ContactSerializer吗?请仔细检查:)因此您在所有字典中提供第一个\u名称,并显示错误?