python - 确定是否在 many=True 的上下文中使用 Django REST Framework 序列化程序
问题描述
我有一个在多个地方使用的 Django REST Framework 序列化程序。其中一个字段是 SerializerMethodField,如果序列化程序仅用于序列化单个对象,我只想包含该字段。基本上,当我拥有 SerializerMethodField 时,我不想包含其中一个(或更改它的行为)MySerializer(objects, many=True)
。任何想法如何做到这一点?
解决方案
从序列化程序中动态删除字段的一种简单方法是将以下代码添加到序列化程序中:
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
从输出数据中删除 ' 字段
推荐阅读
- python - 切换到 Python/Selenium 后无法与 iframe 交互
- jquery - 跟踪jquery ui中的可拖动div?
- c++ - 已知类名的 C++ 模板友元声明嵌套在任何其他
- sql - 优化的 SQL 选择,用于跨多个表进行选择
- kotlin - subscribeOn(Schedulers.io()) 不工作,但 subscribeOn(Schedulers.trampoline()) 不工作
- docker - 为什么我的 Docker 容器没有运行我的 cron 脚本,但是当我重新启动服务 cron 时它运行了?
- java - 如何创建带有圆角背景的 EditText
- ios - 在 pubspec.yaml 中添加 Google Maps 包后,Flutter iOS 应用程序将无法构建
- scala - Scala中具有相互递归类型的递归方案
- python-3.x - 使用 Selenium 和 Python 找不到 css 选择器、方法或元素错误