0

私はDjangoモデルを持っています

class OrderItem(models.Model):
    comment = models.CharField('comment', max_length=255, blank=True)
    ..... 

重要ではないその他の分野。

そして、私はこのように記述されたスパインモデルを持っています

class OrderItemModel(DjangoComplexModel):
    __type_name__ = 'OrderItem'

    class Attributes(DjangoComplexModel.Attributes):
        django_model = OrderItem

および応答を生成する関数

@rpc(Int, _returns=Iterable(OrderItemModel)) 
def GetOrderItems(self, id):
     order = get_object(Order, pk=id)
     items = order.objects.all()
     return items

xmlの説明は

<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
    <Body>
       <SaveOrderItem xmlns="app.sync">
        <model>
           <comment xmlns="app.sync.models">[normalizedString]</comment>
        </model>
       </SaveOrderItem>
        </Body>
</Envelope>

リクエストを行ってからレスポンスを検証し、コメントの開始または終了の OS 文字列にスペースがあることが判明した場合、サーバーは例外を発生させます。私が理解しているように、型 normalizedString はストリップされていない文字列を使用することを許可していません。そのタイプの文字列からその場でスペースを削除する方法も同様です。ソースを調べて、クラス定義を見つけました

class NormalizedString(Unicode):
    __type_name__ = 'normalizedString'
    __extends__ = Unicode

    class Attributes(Unicode.Attributes):
        white_space = "replace"

そのため、 white_space = "replace"はクライアント側でそのチェックを行います。

4

1 に答える 1

0

この問題の解決策を見つけました。デフォルトのフィールド マッパーの「CharField」を Unicode に 1 行だけ置き換えます。

default_model_mapper.register('CharField', Primitive.Unicode) をデフォルト ('CharField', Primitive.NormalizedString) の代わりに

これはspyne/util/django.pyで説明されています

于 2016-03-23T21:18:28.187 に答える