根据其他字段在 Serializer 中添加一个字段:django

Add a field in Serializer depending on other field : django

我有一个序列化器:

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

请为这个用例提出 SerializerMethodField 的解决方案或替代方案。非常感谢!

你可以这样做

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关于如何在序列化程序中添加动态字段