django-restframework中的serializer处理的作用

本文介绍Django中如何利用多个序列化器处理不同的数据库操作,包括数据加工、装饰及验证。通过具体示例展示了如何在序列化器中实现这些功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

django中可以通过多个serializer创建不同的数据库数据处理模型
LIST时:
可以对返回的数据进行加工、装饰

class ManageDeliveryDetailSerializer(serializers.ModelSerializer):
    user = serializers.HiddenField(
        default=serializers.CurrentUserDefault()
    )
    dn = PLDeliveryinsSerializer()
    class Meta:
        model = DeliveryDetail
        fields = '__all__'

dn是一个外键,可以通过serializer实例化,返回后会得到一个具体的dn实例
也可以通过在model中定义方法后再serializer中的重写to_representation函数并调用model中的方法来对传输的数据进行处理

model.py中定义
class Example:
exa = model.CharField()
def foo(self):
pass

serializer.py中调用
class ExampleSerializer(serializer.ModelSerializer):
class Meta:
model = Example
fields = ‘all

    def to_representation(self, obj):
	        data = super(BatchProductSerializer, self).to_representation(obj)
	      	exa = obj.foo()
	        data['exa'] = exa
	        return data

POST时:
可以对POST过来的数据进行验证等操作
如在serializer中定义一个
username = serializers.CharField(required=True, allow_blank=False, label=‘用户名’,
validators=[UniqueValidator(queryset=User.objects.all(), message=‘用戶已存在’)])
则在前端传输数据过来的过程中会对username字段进行一个唯一性验证,如果不唯一则返回用户名已存在

如果在同一个ViewSet中会使用到不同的serializer类可以在view.py中动态定义不同HTTP请求类型的serializer类

    def get_serializer_class(self):
        if self.action == 'retrieve':
            return ...Serializer
        elif self.action == 'create':
            return ...Serializer
        return ...Serializer

PS:当fields = 'all’时默认会将serializer中创建的所有的新字段以及原有model中的所有字段返回

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值