Django rest框架将序列化器的模型方法添加两次

时间:2017-06-23 17:18:08

标签: django django-rest-framework

我知道可以将模型方法或属性添加到序列化程序,如下所示:

class Order(models.Model):
    ...

    def tax_status(self, check_item_bought=True):
        ...

因此,要将total_tax添加到OrderSerializer,就像这样简单:

class OrderSerializer(serializers.ModelSerializer):

tax_status = serializers.CharField(required=False)

class Meta:
    model = Order
    fields = ["tax_status", ...] 

以上效果很好。但是,我需要向序列化程序添加另一个tax_status_all字段,该字段指向相同的方法,但将arg check_item_bought设置为False。我怎样才能做到这一点?任何建议都会有所帮助。

1 个答案:

答案 0 :(得分:2)

为此目标,您可以使用SerializerMethodField

class YourSerializer(serializers.Serializer):
    tax_status = serializers.CharField(required=False)
    tax_status_all = serializers.SerializerMethodField()

    class Meta:
        model = Order
        fields = ("tax_status", "tax_status_all")

    def get_tax_status_all(self, obj):  # "get_" + field name
        return obj.tax_status(check_item_bought=False)
相关问题