首页 > 解决方案 > DRF 序列化器,不同的字段类型

问题描述

当字段可以是不同类型时,是否可以使用 drf 序列化程序存档此类情况。

我正在使用这样的 API,字段位置可以是dictlist,取决于内容。

序列化程序应该是什么样子。我试过类似的东西

class PositionCreateSerializer(SapPositionSerializer):
    positions = serializers.ReadOnlyField(required=False)

但它不起作用

标签: djangodjango-rest-framework

解决方案


可能你可以使用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()

推荐阅读