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

标签 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。我怎样才能做到这一点?任何建议都会有帮助。

最佳答案

为了实现这个目标,您可以使用 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)

关于Django Rest框架向序列化器添加模型方法两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44726838/

相关文章:

python - 在Django中上传文件名

嵌套有reduce的django Q对象

django - 测试 drf serializer validate 的最佳方法是什么

python - 如何引发错误/返回 {"foo": ["This field is required."]} response in Django REST

django - 使用 Vue.js、Django Rest Framework 作为后端和/api/在同一服务器上配置 Nginx?

django - 优化 Django Rest ORM 查询

python - Django 分析

mysql - Django mysql 数据库连接池

python - Django 注释未显示在模板中

python - 嵌套序列化器中的 Django Rest Framework 关系查询