Django Zeep python SOAP客户端发送参数中的空值

Django Zeep python SOAP客户端发送参数中的空值,django,python-3.x,soap,zeep,Django,Python 3.x,Soap,Zeep,有一个外部SOAP服务器,我正试图使用pythondjango框架和zeep库连接并发出请求 WSDL转储如下所示: Prefixes: xsd: http://www.w3.org/2001/XMLSchema ns0: http://tempuri.org/ Global elements: ns0:GetJobCards(key: xsd:string, technicianID: xsd:string, jobCardNumber: xsd:string, jobcards: n

有一个外部SOAP服务器,我正试图使用pythondjango框架和zeep库连接并发出请求

WSDL转储如下所示:

Prefixes:
 xsd: http://www.w3.org/2001/XMLSchema
 ns0: http://tempuri.org/

Global elements:
 ns0:GetJobCards(key: xsd:string, technicianID: xsd:string, jobCardNumber: xsd:string, jobcards: ns0:ArrayOfJobCardsEnt, message: xsd:string)
 ns0:GetJobCardsResponse(GetJobCardsResult: xsd:boolean, jobcards:ns0:ArrayOfJobCardsEnt, message: xsd:string)

Global types:
  xsd:anyType
  ns0:ArrayOfJobCardsEnt(JobCardsEnt: {schema: , _value_1: ANY}[])
  xsd:ID
  xsd:IDREF
  xsd:IDREFS
  xsd:NCName
  xsd:NMTOKEN
  xsd:NMTOKENS
  xsd:NOTATION
  xsd:Name
  xsd:QName
  xsd:anySimpleType
  xsd:anyURI
  xsd:base64Binary
  xsd:boolean
  xsd:byte
  xsd:date
  xsd:dateTime
  xsd:decimal
  xsd:double
  xsd:duration
  xsd:float
  xsd:gDay
  xsd:gMonth
  xsd:gMonthDay
  xsd:gYear
  xsd:gYearMonth
  xsd:hexBinary
  xsd:int
  xsd:integer
  xsd:language
  ....


  Bindings:
   Soap11Binding: {http://tempuri.org/}CallSoap
   Soap12Binding: {http://tempuri.org/}CallSoap12

  Service: Call
   Port: CallSoap (Soap11Binding: {http://tempuri.org/}CallSoap)
   Operations:
      GetJobCards(key: xsd:string, technicianID: xsd:string, 
      jobCardNumber: xsd:string, jobcards: ns0:ArrayOfJobCardsEnt, 
      message: xsd:string) -> GetJobCardsResult: xsd:boolean, 
      jobcards: ns0:ArrayOfJobCardsEnt, message: xsd:string

  ....(some other operations)
其中一个调用是获取具有以下模式的工作卡列表

<s:element name="GetJobCards">
 <s:complexType>
  <s:sequence>
   <s:element minOccurs="0" maxOccurs="1" name="key" type="s:string"/>
   <s:element minOccurs="0" maxOccurs="1" name="technicianID" type="s:string"/>
   <s:element minOccurs="0" maxOccurs="1" name="jobCardNumber" type="s:string"/>
   <s:element minOccurs="0" maxOccurs="1" name="jobcards" type="tns:ArrayOfJobCardsEnt"/>
   <s:element minOccurs="0" maxOccurs="1" name="message" type="s:string"/>
  </s:sequence>
 </s:complexType>
</s:element>

<s:complexType name="ArrayOfJobCardsEnt">
 <s:sequence>
  <s:element minOccurs="0" maxOccurs="unbounded" name="JobCardsEnt" nillable="true">
   <s:complexType>
    <s:sequence>
     <s:element ref="s:schema"/>
     <s:any/>
    </s:sequence>
   </s:complexType>
  </s:element>
 </s:sequence>
</s:complexType>
2-将值设置为零 这些似乎都不起作用,我也不知道如何让它发挥作用

有人能在这方面指导我吗


提前谢谢

下面是我如何让它工作的

with self.client.settings(strict=False):
        response_body = self.client.service.GetJobCards(
            key=some_valid_key,
            technicianID=some_technician_id,
            message=''
        )

并且省略了“jobCardNumber”和“jobcards”的值

你能给我分享client.wsdl.dump()的结果吗?@Theone1我编辑了我的问题以包括dumps是否有类似于“ns0:ArrayOfJobCardsEnt(JobCardsEnt:{schema:,_value_1:ANY}[])的全局类型的“JobCardsEnt”?还有,你列出了技术人员ID吗?如果有,则必须循环使用TechnicianID以获取jobCardEnt的列表。@Theone1因此不存在任何全局类型的“JobCardsEnt”。没有,没有任何技术人员的名单。所以我不明白为什么当我将
设置为空时,postman可以正常工作,就像我从服务器返回的结果what is strict=False一样?@theone1one strict–boolean指示lxml是否应该被解析为“strict”。如果为false,则启用恢复模式,该模式将尽可能地解析无效XML。
request_data = {
  'key': some_valid_key,
  'technicianID': some_technician_ID,
  'jobCardNumber': xsd.SkipValue,
  'jobcards': xsd.SkipValue,
  'message': ''
}
response_body = client.service.GetJobCards(**request_data)
from zeep.xsd import Nil

jobCardEnt = client.get_type('ns0:ArrayOfJobCardsEnt')
jobCardEnt = jobCardEnt()
request_data = {
  'key': some_valid_key,
  'technicianID': some_technician_ID,
  'jobCardNumber': Nil,
  'jobcards': Nil,
  'message': ''
}
response_body = client.service.GetJobCards(**request_data)
with self.client.settings(strict=False):
        response_body = self.client.service.GetJobCards(
            key=some_valid_key,
            technicianID=some_technician_id,
            message=''
        )