2017-05-24 5 views
0

があることを考えると?変換オブジェクトが

フィールドcomm_valueは、たとえば1234:5678の文字列で、1234_5678に変換したいと考えています。

これを達成する方法についてアドバイスをいただけますか?

PS。 pre_dumpはそれを行うための正しい方法を探しますが、それはあなたがやりたいことができmarshmallow

答えて

0

pre_dumpを使用して私の最初の日ですので、私はわからないが、私は代わりにクラスメソッドを使用します。

class BGPcommunitiesElasticSchema(marshmallow.Schema): 
    comm_name = marshmallow.fields.Str(required=True) 
    comm_value = marshmallow.fields.Method("comm_value_normalizer", required=True) 
    dev_name = marshmallow.fields.Str(required=True) 
    time_stamp = marshmallow.fields.Integer(missing=time.time()) 


    @marshmallow.validates('comm_value') 
    def check_comm_value(self, value): 
     if value.count(":") < 1: 
      raise marshmallow.ValidationError("a BGP community value should contain at least once the colon char") 
     if value.count(":") > 2: 
      raise marshmallow.ValidationError("a BGP community value should contain no more than two colon chars") 

    @classmethod 
    def comm_value_normalizer(cls, obj): 
     return obj.comm_value.replace(":", "_") 

ますもともとの "comm_value"を元のままにしたい場合は、独自のcomm_value_normalized属性を作成することもできます。

+0

もしあなたが時間があれば、https://stackoverflow.com/questions/44166325/marshmallow-convert-dict-to-tupleでも助言してください。それが可能かどうか疑問に思っています:) – iamsterdam

関連する問題