如何获取Django Serializer的字段名称列表?
获取Django REST Framework序列化器的字段名称列表
针对你的AccountSerializer,这里提供几种获取字段名称列表的有效方法:
方法1:实例化序列化器后获取(最通用)
这是最简单且适用于所有场景的方式,不管你在Meta里用的是fields列表、__all__还是exclude:
serializer = AccountSerializer() field_names = list(serializer.fields.keys()) # 输出: ['id', 'account_holder', 'age', 'salary', 'age_score', 'salary_score']
serializer.fields是一个有序字典,包含序列化器所有的字段对象,它的keys()就是你需要的字段名称字符串列表。
方法2:正确调用get_field_names方法
你之前调用AccountSerializer.get_field_names()报错,是因为这是实例方法,需要传入self、declared_fields和info三个参数。正确的调用方式如下:
from rest_framework.serializers import ModelSerializer # 获取序列化器的声明字段和元信息 declared_fields = AccountSerializer._declared_fields info = ModelSerializer.serializer_class_info(AccountSerializer) # 实例化序列化器后调用方法 serializer_instance = AccountSerializer() field_names = serializer_instance.get_field_names(declared_fields, info) # 输出同样的字段名称列表
不过这种方式相对繁琐,一般推荐用方法1。
方法3:直接读取Meta类的fields(仅适用于显式定义的情况)
如果你的序列化器Meta里明确列出了fields(像你例子里那样),可以直接读取这个属性:
field_names = list(AccountSerializer.Meta.fields) # 输出: ['id', 'account_holder', 'age', 'salary', 'age_score', 'salary_score']
注意:如果fields设为__all__或者使用exclude来排除字段,这种方法就无法得到完整的字段列表,因为此时需要结合模型字段来解析,这时候还是用方法1更可靠。
内容的提问来源于stack exchange,提问作者Domenico Spidy Tamburro
相关产品推荐
相关产品推荐

