Python 如何使用插入多个记录
我正在做一个小项目,Django Rest框架,我已经创建了add contact函数,您可以在我的create函数中看到这一点。现在我正在进行批量导入,但当我以列表而不是以目录的形式提交数据时,会收到一条错误消息: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
{"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已创建)
劝告
- 它们可能不是最佳实践,但确实有效
serializeObject = ContactSerializer(data = request.data, many=True)
这回答了你的问题吗@Tiki我必须扩展ModelSerializer吗?不,但也许您应该避免在这个创建方法中使用序列化程序,并迭代列表和每个dict验证/创建对象。@Tiki示例有点复杂:),您能根据我的代码给我一个示例吗please@Tiki我应该创建一个新的序列化程序吗?不起作用:(我得到了“first_name”:[“此字段是必需的。”]由于不是空的,您可以发布接收到的数据和序列化程序类ContactSerializer吗?请仔细检查:)因此您在所有字典中提供第一个\u名称,并显示错误?