【问题标题】:Spyne. Set Array fixed number items斯宾。设置数组固定数量项
【发布时间】:2013-07-22 06:44:19
【问题描述】:

我在 spyne 中使用数组属性创建模型,我需要修复数组中的数字项。 即我的模型看起来像:

class MyModel(ComplexModel):
__namespace__ = 'myns'

string_field = String(**{'min_occurs': 1, 'max_occurs': 1, 'nillable': False})
array_field = Array(Integer(**{'max_occurs': 16, 'min_occurs': 16, 'nillable': False}), 
                 **{'min_occurs': 1, 'max_occurs': 1, 'nillable': False})

因此,这意味着我需要具有字符串属性的对象和具有 16 个整数项的数组,但是此代码直接指向 xml,例如:

<myns:MyModel>
    <!--Optional:-->
    <myns:string_field>?</myns:string_field>
    <myns:array_field>
        <!--Zero or more repetitions:-->
        <myns:integer>?</myns:integer>
    </myns:array_field>
</myns:MyModel>

myns:array_field 中只有一个整数项,而不是 16。我的代码有什么问题,或者我需要设置多少个数组项?

谢谢。

【问题讨论】:

    标签: spyne


    【解决方案1】:

    两种选择:

    1. 您可以定义一个构造函数并以通常的方式设置默认值。即

      class MyModel(ComplexModel):
          __namespace__ = 'myns'
      
          string_field = String(min_occurs=1, nillable=False)
          array_field = Array(Integer(max_occurs=16, min_occurs=16, nillable=False),
                       min_occurs=1, max_occurs=1, nillable=False)
      
          def __init__(self):
              self.array_field = [0] * 16
      
    2. 您可以为数组定义一个默认值。这是一个完整的脚本:

      from lxml import etree
      from spyne.model.complex import ComplexModel, Array
      from spyne.model.primitive import String, Integer
      
      class MyModel(ComplexModel):
          __namespace__ = 'myns'
      
          s = String(min_occurs=1, nillable=False)
          a = Array(Integer(max_occurs=16, min_occurs=16, nillable=False),
               min_occurs=1, max_occurs=1, nillable=False, default=[0]*16)
      
      from spyne.util.xml import get_object_as_xml
      
      print etree.tostring(get_object_as_xml(MyModel(s='some_string'), MyModel), pretty_print=True)
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-20
      • 2020-04-21
      • 1970-01-01
      • 1970-01-01
      • 2015-01-12
      • 1970-01-01
      • 2020-07-28
      • 1970-01-01
      相关资源
      最近更新 更多