Python Django REST |全局排除序列化程序中的某些字段
是否有方法从所有模型中全局排除或包含某些字段 我在所有模型上都有“active”、“created_time”、“Update_time”、“created_by”、“Update_by”等字段,除非在exclude中指定,否则这些字段会对响应产生额外负载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
是否有一种方法可以全局排除它们,除非在字段中指定它们?这不是最干净的解决方案,但我是通过继承和特定引用父序列化程序的
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
中的字段,这样可以避免此类问题。