django - DRF 序列化器,不同的字段类型
问题描述
当字段可以是不同类型时,是否可以使用 drf 序列化程序存档此类情况。
我正在使用这样的 API,字段位置可以是dict或list,取决于内容。
序列化程序应该是什么样子。我试过类似的东西
class PositionCreateSerializer(SapPositionSerializer):
positions = serializers.ReadOnlyField(required=False)
但它不起作用
解决方案
可能你可以使用SerializerMethodField
. 例如:
class PositionCreateSerializer(SapPositionSerializer):
positions = serializers.SerializerMethodField()
def get_positions(self, obj):
if obj.content == 'list':
return list(...) # list of some values
return dict(...) # a dict
或者,您可以创建一个新的 DRF 字段并覆盖to_representation
方法。像这样:
class PositionsField(serializers.ReadOnlyField):
def to_representation(self, value):
if value == 'something list':
return list()
return dict()
class PositionCreateSerializer(SapPositionSerializer):
positions = PositionsField()
推荐阅读
- if-statement - 用有效的电子邮件格式替换无效的电子邮件格式
- vue.js - 如何为 Element UI 单选组上的更改设置 preventDefault
- c++ - 为什么 reinterpret_cast 不是 constexpr?
- json - 替换 JSON 树中未知位置的 JSON 对象
- javascript - 几个不同浏览器选项卡中的 Angular 和 TypeScript/javascript 单例
- python-3.x - 在 Numpy 中将一维数组转换为行或列向量
- yacc - 如何避免yacc C语法乘法与指针冲突?
- python - NUMPY:np.empty(()) 在二维数组中做了什么?
- c# - 在c#中调用对象外部方法效率更高?
- r - 在散点图中使用两位数符号绘制