猿问

确定 Django REST Framework 序列化器是否在 Many=True 的上下文中使用

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



PIPIONE
浏览 97回答 2
2回答

哔哔one

您好,这是我的解决方案,用于确定我们是否处于 Many=True 的上下文中:我重写新的类方法并向上下文 kwargs 对象添加一个“has_many”键:    class MySerializer(serializer.ModelSerializer):        def __new__(cls, *args, **kwargs):            if kwargs.get('many', False) is True:                context = kwargs.get('context', {})                context.update({'has_many': True})                kwargs.update({'context': context})            return super().__new__(cls, *args, **kwargs)        def __init__(self, *args, **kwargs):            super().__init__(*args, **kwargs)            if self.context.get('has_many', False):                # Do something

狐的传说

从序列化器中动态删除字段的一种简单方法是将以下代码添加到序列化器中: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
随时随地看视频慕课网APP

相关分类

Python
我要回答