2016-11-28 2 views
3

Mit Django REST Framework habe ich 2 Serialisierer: PageSerializer und CommentSerializer.Pass Kontext von einem Serializer zum anderen?

CommentSerializer hängt von einigen zusätzlichen "Kontext" -Wert ab, aber es bekommt es nicht direkt, stattdessen muss es von PageSerializer bekommen, da sie eine verschachtelte Beziehung haben.

Also brauche ich so etwas haben:

class CommentSerializer(serializers.ModelSerializer): 
    ... 
    my_field = serializers.SerializerMethodField() 

    def get_my_field(self, comment): 
     my_value = self.context['my_value'] 
     ... 

class PageSerializer(serializers.ModelSerializer): 
    ... 
    comments = CommentSerializer(
     many=True, 
     context={'my_value': my_value} # my_value doesn't exist until __init__ is called, so I can't pass it 
    ) 

... 
my_value = 1 
page_serializer = PageSerializer(page, context={'my_value': my_value}) 

Aber natürlich kann dieser Code nicht funktionieren.
Welche Art von Workaround kann ich hier tun?

Antwort

3

Wenn Sie die Beziehung im Serializer wie Sie definiert haben, wird der Kontext PageSerializer automatisch an CommentSerializer übergeben, wenn die Kommentare der Seite serialisiert werden.

Also, nur die Definition comments = CommentSerializer(many=True) wird tun.

+0

Oh .. das ist eine Erleichterung, danke! – user3134477

Verwandte Themen