Django Rest Framework 覆盖 modelserialzer 中的模型字段
Django Rest Framework override model fields in modelserialzer
假设我有这个序列化器:
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
是模型字段,我想用 return 不同的值覆盖它,但看起来 DRF 忽略了自定义字段和 return 对象中的原始值。
如果我不将它们放在 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,但我想知道是否有更简单的方法。
您忘记添加 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
也可以将方法名称作为可选参数传递给每个 serializers.SerializerMethodField()
并指定要用于每个 custom/overridden 字段的自定义方法名称。这样您就可以在序列化器 class.
内的解析器方法名称中省略 get_
前缀
假设我有这个序列化器:
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
是模型字段,我想用 return 不同的值覆盖它,但看起来 DRF 忽略了自定义字段和 return 对象中的原始值。
如果我不将它们放在 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,但我想知道是否有更简单的方法。
您忘记添加 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
也可以将方法名称作为可选参数传递给每个 serializers.SerializerMethodField()
并指定要用于每个 custom/overridden 字段的自定义方法名称。这样您就可以在序列化器 class.
get_
前缀