diff --git a/common/serializers.py b/common/serializers.py new file mode 100644 index 0000000..c6d344d --- /dev/null +++ b/common/serializers.py @@ -0,0 +1,23 @@ +from rest_framework.serializers import ModelSerializer + + + +class DynamicFieldsModelSerializer(ModelSerializer): + """ + A ModelSerializer that takes an additional `fields` argument that + controls which fields should be displayed. + """ + + def __init__(self, *args, **kwargs): + # Don't pass the 'fields' arg up to the superclass + fields = kwargs.pop("fields", None) + + # Instantiate the superclass normally + super().__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) + for field_name in existing - allowed: + self.fields.pop(field_name)