2013-07-22 4 views
0

배열 속성을 사용하여 spyne에서 모델을 만들고 배열의 숫자 항목을 수정해야합니다. 내 모델 즉 은 다음과 같습니다Spyne. 배열 고정 번호 항목 설정

<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> 

이 그냥 : 그래서

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}) 

, 내가 추천 정수 항목과 문자열 속성과 배열 객체에 필요하지만, XML에이 코드를 직접 의미 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

오는 작업을 수행, 날 믿어. –