2016-12-12 30 views
1

私はオブジェクトウィジェットを使ってオブジェクトの属性を表示しています。例えばJinja2のテンプレートの中にオブジェのプロパティを表示するには、「created_atと」をしようとするとPythonオブジェクトを文字列参照から取り出す方法

serialization cstruct: [<abc.modules.core.models.Assessment object at 0x105583320>] 

は、結果は次のとおりです:

jinja2.exceptions.UndefinedError: 'str object' has no attribute 'created_at' 

何ができる私のウィジェットのシリアル化法では、私は私のcstructはが正確であることがわかります私はAssessmentオブジェクトをJinja2内の文字列ではなくオブジェクトとして考えるようにしますか?私はそれが非常にシンプルだと信じていますが、私はまだ間違っているものを見つけることができません。助けてください。

もう少しコード: スキーマノード:

class SubcontractorAssessmentSchema(MappingSchema): 
    """ **Schema definition for ``Subcontractor Assessment`` part.** """ 
    readonly = True 
    assessments = SchemaNode(String(), widget=LastResultsWidget2(), 
          title='Assessment:', missing='') 

[...]

ウィジェット:

class LastResultsWidget2(SelectWidget): 
    """ **Widget for Last Results.** """ 
    template = 'last_results' 
    readonly_template = 'last_results' 
    strip = True 

    def serialize(self, field, cstruct, **kw): 
     """ 
     Overwritten default serialize of SelectWidget. 

     :param field: Field 
     :param cstruct: Value of Widget 
     :param kw: Additional arguments. 
     :return: rendered field. 
     """ 
     if cstruct in (colander.null, None): 
      cstruct = self.null_value 
#  print ('serialization cstruct: ' +str(cstruct)) 
     return field.renderer(self.template, field=field, cstruct=cstruct) 
+0

ドント 'シリアル化 - オブジェクトを送信します。コードを表示します。 – furas

+0

私が知っている限り、これはDeformウィジェットで動作する方法です。ウィジェットを使ってシリアライズを避けることはできません。 – Piotr

+0

これは0.9の変形ですか?完全なトレースバックとJinja 2テンプレートのエラーを明確にすることはできますか? –

答えて

0

これは、この特定のColaderバージョンwithiエラーでした。ウィジェットはシングルトンのような振る舞いを強いられていました。すべてのあなたのヒントをありがとう!

関連する問題