Python Django REST |全局排除序列化程序中的某些字段

Python Django REST |全局排除序列化程序中的某些字段,python,django,django-rest-framework,Python,Django,Django Rest Framework,是否有方法从所有模型中全局排除或包含某些字段 我在所有模型上都有“active”、“created_time”、“Update_time”、“created_by”、“Update_by”等字段,除非在exclude中指定,否则这些字段会对响应产生额外负载 是否有一种方法可以全局排除它们,除非在字段中指定它们?这不是最干净的解决方案,但我是通过继承和特定引用父序列化程序的Meta类来做到这一点的: class SampleSerializer(serializers.HyperlinkedMod

是否有方法从所有模型中全局排除或包含某些字段

我在所有模型上都有“active”、“created_time”、“Update_time”、“created_by”、“Update_by”等字段,除非在exclude中指定,否则这些字段会对响应产生额外负载


是否有一种方法可以全局排除它们,除非在字段中指定它们?

这不是最干净的解决方案,但我是通过继承和特定引用父序列化程序的
Meta
类来做到这一点的:

class SampleSerializer(serializers.HyperlinkedModelSerializer):
    notes = MarkdownNoteSerializer(many=True,required=False,allow_add_remove=True)
    class Meta:
        model = Sample
        fields = ('url', 'creation_datetime', 'update_datetime','notes')

class RipeSampleSerializer(SampleSerializer):
    class Meta:
        model = RipeSample
        fields = SampleSerializer.Meta.fields + ( 'ripe', )
然后,可以通过显式引用或不引用字段来包含或排除字段

您也没有理由不能创建元组集以包含在字段中:

SampleFields = ('foo', 'bar', 'baz')
OtherFields = ('update', 'creation')

[...]
fields = SampleFields + OtherFields + ('yahoo',)

创建将覆盖
get\u字段的mixin方法:

class CustomFieldsMixin(object):
    def _get_exlude_fields(self):
        return ["active", "created_time", "updated_time", "created_by", "updated_by"]

    def _get_include_fields(self):
        return {"name": serializers.CharField()}

    def get_fields(self):
        fields = super(CustomFieldsMixin, self).get_fields()

        for exclude_field in self._get_exclude_fields():
            if exclude_field in fields:
                del field[fields]

        for include_field, include_field_value in self._get_include_fields().items():
            if include_field not in fields:
                 field[include_field] = include_field_value

        return fields
(这段代码只是基本思想的示例)

如果每个序列化程序:

class SampleSerializer(CustomFieldsMixin, serializers.HyperlinkedModelSerializer)

建议:在序列化程序上指定要包含在
Meta.fields
中的字段,这样可以避免此类问题。