2017-12-05 7 views
0

状況は次のとおりです。私のシリアライザでDjango Rest Frameworkシリアライザメソッドのフィールドで再利用するオブジェクトを保存する方法は?次のように

  • 2のフィールドは、それぞれのコンテンツを取得するために、シリアライザメソッドフィールドの機能を使用しています。
  • これらのフィールドのそれぞれで、と同じ正確な関数を呼び出してコンテンツを生成しています。ちょっとこのよう

class ProductSerializer(serializers.ModelSerializer): 
    field_1 = serializers.SerializerMethodField() 
    def get_field_1(self, obj): 
     content = generate_content(obj) 
     return content.field_1 

    field_2 = serializers.SerializerMethodField() 
    def get_field_2(self, obj): 
     content = generate_content(obj) 
     return content.field_2 

あなたが見ることができるように、両方の方法は、同じ引数で、同じ関数を呼び出すため、まったく同じ結果を得ています。 generate_content関数は非常に大きいので、コンテンツを一度保存​​してから2つのフィールドを生成するのが最も良いと感じています。どうすればこの問題を解決できますか?ありがとう!

+0

generate_content機能を何? – Carlos

答えて

1

あなたは、単にその変数が存在するかどうgenerate_contentをチェック呼び出されたときに、変数内に生成されたコンテンツを置くことができます。

class ProductSerializer(serializers.ModelSerializer): 
    def __init__(self, *args, **kwargs): 
     super(ProductSerializer, self).__init__(*args, **kwargs) 
     self.generated_content = None 

    def generate_content(self, obj): 
     if self.genretated_content: 
      return self.genretated_content 
     self.genretated_conten = 1 # gernerate here 
     return self.genretated_content 

    field_1 = serializers.SerializerMethodField() 
    def get_field_1(self, obj): 
     content = generate_content(obj) 
     return content.field_1 

    field_2 = serializers.SerializerMethodField() 
    def get_field_2(self, obj): 
     content = generate_content(obj) 
     return content.field_2 
関連する問題