根据其他字段在序列化程序中添加字段:Django

2024-04-28 04:11:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个seriliazer:

class aaaser(serializers.ModelSerializer):
    client_code = serializers.SerializerMethodField()
    status = serializers.SerializerMethodField()
    
    def get_status(self, obj):
        status_code = obj.status if obj.status else -1
        return status_code

    class Meta:
        model = models.Order
        fields = ('client_code', 'status', 'order_id', 'details')

在这个seriliazer中,我想添加一个名为cancel_reason的字段,只有当值为status == 5时才应该添加该字段

class aaaser(serializers.ModelSerializer):
    client_code = serializers.SerializerMethodField()
    status = serializers.SerializerMethodField()
    
    def get_status(self, obj):
        status_code = obj.status if obj.status else -1
        if status_code == 5:
            # this felt dumb but had to try!
            cancel_reason = serializers.SerializerMethodField()
        return status_code

    def get_cancel_reason(self, obj):
        return "Dummy-reason"

    class Meta:
        model = models.Order
        fields = ('client_code', 'status', 'order_id', 'details')

^This Doesn't work

请为这个用例建议一个解决方案或替代方案。。非常感谢


1条回答
网友
1楼 · 发布于 2024-04-28 04:11:19

你可以这样做

class aaaser(serializers.ModelSerializer):
    client_code = serializers.SerializerMethodField()
    status = serializers.SerializerMethodField()

    def get_status(self, obj):
        status_code = obj.status if obj.status else -1
        if status_code == 5:
            self.fields['cancel_reason'] = serializers.SerializerMethodField()
        return status_code

如前所述here关于如何在序列化程序中添加动态字段

相关问题 更多 >