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中的所有字段返回