2013-07-22 40 views
0

我使用數組屬性在spyne中創建模型,並且需要修復數組中的數字項目。 即我的模型看起來像: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.我的代碼中出現了什麼問題,或者是否可以設置我需要的數組項的數量?

謝謝。

回答

0

兩個選項:

  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) 
    
+0

不幸的是不起作用( – Alexey

+0

哦,相信我,它的工作。 –