在Django Serializer类中选择Serializer for field

时间:2017-12-11 20:05:04

标签: django python-3.x django-rest-framework serializer

我有模特,我可以拥有所有者是用户或客户

@property
    def owner(self):
        return self.created_by_user or self.created_by_client

并拥有我需要此字段的序列化程序

class MessageSerializer(serializer.ModelSerializer):
owner = (can be user or client) i take it from @property in model

我有2个串行器UserSerializer和ClientSerializer我想为所有者写这样的东西

owner = UserSerializer if insstance(User, value) or ClientSerializer if insstance(Client, value)

任何想法??

1 个答案:

答案 0 :(得分:0)

你可以使用DRF的SerializerMethodField来解决这个问题:

class MessageSerializer(serializers.ModelSerializer):
    owner = serializers.SerializerMethodField()

    def get_owner(self, instance):
        value = instance.field # replace the field name
        if instance.created_by_user:
            return UserCreatedSerializer(value).data
        elif instance.created_by_client:
            return ClientCreatedSerializer(value).data

如果我错误地使用了属性和序列化名称,我很抱歉,但我认为你会得到基本的想法:因为所有者是属性,DRF序列化程序无法直接序列化属性所以你必须使用SerializerMethodField并序列化你的所有者基于方法中的测试逻辑

希望这会有所帮助