Zygro
Zygro

Reputation: 7119

Django serializer inherit and extend fields

I have these 2 serializers:

class BasicSerializer(serializers.ModelSerializer):
    class Meta:
         model = MyModel
         fields = ('lengthy', 'touple', 'of', \
              'fields', 'like', '10', 'of', 'them')

class AdvandedSerializer(BasicSerializer):
    additional_field = serializers.SerializerMethodField()
    def get_additional_field(self, obj):
        return('not important')
    class Meta:
         model = MyModel
         fields = ('lengthy', 'touple', 'of', \
              'fields', 'like', '10', 'of', 'them', 'additional_field')       

This is obviously rather ugly code. I would like to get and extend the fields touple from super(), however I have no idea how.

Upvotes: 67

Views: 29779

Answers (2)

Ganesh Negi
Ganesh Negi

Reputation: 2019

You can do:

class BasicSerializer(serializers.ModelSerializer):
    class Meta:
         model = MyModel
         fields = ('lengthy', 'touple', 'of', 'fields', 'like', '10', 'of', 'them')

class AdvandedSerializer(BasicSerializer):
    additional_field = serializers.SerializerMethodField()

    def get_additional_field(self, obj):
        return('not important')

    class Meta(BasicSerializer.Meta):
        fields = BasicSerializer.Meta.fields + ('additional_field',)

Upvotes: 139

anjaneyulubatta505
anjaneyulubatta505

Reputation: 11685

we can do like

class AdvandedSerializer(BasicSerializer):
    # ... some code

    class Meta:
         model = MyModel
         fields = BasicSerializer.Meta.fields + ('additional_field',)

Upvotes: 26

Related Questions