Django Rest框架向序列化器添加模型方法两次

Ale*_*lla 2 django django-rest-framework

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

class Order(models.Model):
    ...

    def tax_status(self, check_item_bought=True):
        ...
Run Code Online (Sandbox Code Playgroud)

因此,要添加total_taxOrderSerializer,就这么简单:

class OrderSerializer(serializers.ModelSerializer):

    tax_status = serializers.CharField(required=False)

    class Meta:
        model = Order
        fields = ["tax_status", ...] 
Run Code Online (Sandbox Code Playgroud)

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

Kam*_*mil 5

为了这个目标,你可以使用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)
Run Code Online (Sandbox Code Playgroud)