我们说我有这个序列化器:
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
这些字段offer
,cart_item
和stock_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,但我想知道是否有更简单的方法。
答案 0 :(得分:14)
您忘记添加get_
前缀。您的方法名称应该具有SerializerMethodField docs
get_
前缀
def get_offer(self, obj):
return 123
def get_cart_item(self, obj):
return 123
def get_stock_details(self, obj):
return 123
答案 1 :(得分:0)
也可以将方法名称作为可选参数传递给每个serializers.SerializerMethodField()
,并为每个自定义/重写字段指定要使用的自定义方法名称。这样,您可以在序列化程序类内的解析器方法名称中省略get_
前缀。