【问题标题】:Django Rest Framework override model fields in modelserialzerDjango Rest Framework 覆盖模型序列化器中的模型字段
【发布时间】:2015-02-17 00:33:06
【问题描述】:

假设我有这个序列化程序:

class DashboardItemSerializer(ModelSerializer):
    offer = serializers.SerializerMethodField()
    cart_item = serializers.SerializerMethodField()
    stock_details = serializers.SerializerMethodField()

    class Meta:
        model = OrderItem
        fields = ('uuid', 'seller', 'total', 'tax', 'offer', 'shipping_address', 'cart_item', 'stock_details')

    def offer(self, obj):
        return 123

    def cart_item(self, obj):
        return 123

    def stock_details(self, obj):
        return 123

offercart_itemstock_details 这些字段是模型字段,我想用它覆盖它以返回不同的值,但看起来 DRF 忽略了自定义字段并返回 obj 中的原始值。

如果我不将它们放在fields 列表中,数据将根本不包含这些字段。

class DashboardItemSerializer(ModelSerializer):
    offer = serializers.SerializerMethodField()
    cart_item = serializers.SerializerMethodField()
    stock_details = serializers.SerializerMethodField()

    class Meta:
        model = OrderItem
        fields = ('uuid', 'seller', 'total', 'tax', 'shipping_address')

    def offer(self, obj):
        return 123

    def cart_item(self, obj):
        return 123

    def stock_details(self, obj):
        return 123

一种方法是define fields explicitly,但我想知道是否有更简单的方法。

【问题讨论】:

  • 你为什么说if I don't put them in the fields list, the data will simply not include those fields.
  • 查看更新的问题

标签: django django-rest-framework


【解决方案1】:

还可以将方法名称作为可选参数传递给每个serializers.SerializerMethodField(),并为每个自定义/覆盖字段指定要使用的自定义方法名称。这样,您可以在序列化程序类中的解析器方法名称中省略 get_ 前缀。

【讨论】:

    【解决方案2】:

    您忘记添加 get_ 前缀。您的方法名称应具有 get_ 前缀,正如 SerializerMethodField docs 中提到的那样

    def get_offer(self, obj):
        return 123
    
    def get_cart_item(self, obj):
        return 123
    
    def get_stock_details(self, obj):
        return 123
    

    【讨论】:

      猜你喜欢
      • 2018-06-07
      • 2016-11-14
      • 1970-01-01
      • 2016-11-29
      • 2013-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多