【问题标题】:Select Serializer for field in Django Serializer class为 Django 序列化器类中的字段选择序列化器
【发布时间】:2017-12-11 20:05:04
【问题描述】:

我有模型,我可以让所有者是用户或客户

@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)

有什么想法吗??

【问题讨论】:

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


    【解决方案1】:

    您可以使用 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 并序列化你的所有者基于方法中的测试逻辑

    希望对你有帮助

    【讨论】:

    • 嗨,谢谢它对我的帮助。我将 value = instance.field 更改为 value = instance.owner.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-20
    • 2016-06-19
    • 1970-01-01
    • 2020-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多