How to dynamically change depth in Django Rest Framework nested serializers?

前端 未结 1 2109
[愿得一人]
[愿得一人] 2021-02-14 19:36

I have a set of nested serializers which have a depth set on their respective Meta classes. I\'d like to programmatically change the depth based on par

1条回答
  •  傲寒
    傲寒 (楼主)
    2021-02-14 19:46

    Here is my code that incorporates including/excluding fields, as well as dynamically adjusting the depth. Adjust it to your taste. :)

    class DynamicModelSerializer(serializers.ModelSerializer):
    """
    A ModelSerializer that takes an additional `fields` argument that
    controls which fields should be displayed, and takes in a "nested"
    argument to return nested serializers
    """
    
    def __init__(self, *args, **kwargs):
        fields = kwargs.pop("fields", None)
        exclude = kwargs.pop("exclude", None)
        nest = kwargs.pop("nest", None)
    
        if nest is not None:
            if nest == True:
                self.Meta.depth = 1
    
        super(DynamicModelSerializer, self).__init__(*args, **kwargs)
    
        if fields is not None:
            # Drop any fields that are not specified in the `fields` argument.
            allowed = set(fields)
            existing = set(self.fields.keys())
            for field_name in existing - allowed:
                self.fields.pop(field_name)
    
        if exclude is not None:
            for field_name in exclude:
                self.fields.pop(field_name)
    

    0 讨论(0)
提交回复
热议问题