django rest framework nested modelserializer

2019-06-20 08:54发布

this is realted to my other question
django-rest-framework, multitable model inheritance, ModelSerializers and nested serializers

In django rest framework we can define nested model serializer like so

class OtherModelSerializer(serializer.ModelSerializer):
    mybasemodel_set = MyBaseModelSerializer(many=True)

    class Meta:
        model = OtherModel

when we create an OtherModelSerializer, the MyBaseModelSerializer is instantiated before __init__ is run. I believe this is the case because if I override the __init__() of MyBaseModelSerializer and check "instance", it is None.

My question is when and how does MyBaseModelSerializer get passed the queryset or instance for mybasemodel_set?

My goal here is to override what happens when we do this.

1条回答
做个烂人
2楼-- · 2019-06-20 09:00

This line

mybasemodel_set = MyBaseModelSerializer(many=True)

Will initialize an instance of class MyBaseModelSerializer and pass many=True as parameter.


How does MyBaseModelSerializer get passed the queryset or instance?

I am not 100% sure what are you trying to do but most probably

class MyBaseModelSerializer(serializers.ModelSerializer):
     def to_representation(self, instance):
         pass

Is the function you are looking for. You will be given an instance and expected to return serialized data.

http://www.django-rest-framework.org/api-guide/serializers/#overriding-serialization-and-deserialization-behavior

查看更多
登录 后发表回答