首页 > 解决方案 > 确定是否在 many=True 的上下文中使用 Django REST Framework 序列化程序

问题描述

我有一个在多个地方使用的 Django REST Framework 序列化程序。其中一个字段是 SerializerMethodField,如果序列化程序仅用于序列化单个对象,我只想包含该字段。基本上,当我拥有 SerializerMethodField 时,我不想包含其中一个(或更改它的行为)MySerializer(objects, many=True)。任何想法如何做到这一点?

标签: pythondjangodjango-rest-framework

解决方案


从序列化程序中动态删除字段的一种简单方法是将以下代码添加到序列化程序中:

class MySerializer(serializer.ModelSerializer):
    def __init__(self, *args, **kwargs):
        remove_fields = kwargs.pop('remove_fields', None)
        super(MySerializer, self).__init__(*args, **kwargs)

        if remove_fields:
            # for multiple fields in a list
            for field_name in remove_fields:
                self.fields.pop(field_name, None)

然后,当您需要从序列化程序中删除某些字段时,使用MySerializer(objects, many=True, remove_fields=['list_of_your_fields',])它将list_of_your_fields从输出数据中删除 ' 字段


推荐阅读