本文主要是介绍DRF-模型类序列化器的使用ModelSerializer,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
ModelSerializer可以根据指定的模型类,自动生成相应的序列化器字段,继承Serializer的时候所有方法是手写,现在使用继承ModelSerializer,不用手写模型类里的每个字段限制
class BookModelSerializer(serializers.ModelSerializer):class Meta:model = BookInfo # 指定生成字段的模型类fields = ('btitle', 'bread') # 指定模型类中的字段
第一步 指定模型类
第二步使用fields属性
1、fields = ('btitle', 'bread') # 指定模型类中的字段,这种常用
2、如果想生成所有字段
fields = '__all__' 就会生成模型类中的所有字段
3、如果想取反操作
exclude =('btitle',) # 取反操作,除了这个字段外的其他字段都生成
验证方式
python manage.py shell 进入django交互环境
from book_drf.serializer import BookModelSerializer
BookModelSerializer()
可以看出自动帮我们生成了校验值,但是有些值不太符合我们要求
如果想修改字段限制,有两种方式
第一种、显示指明字段
class BookModelSerializer(serializers.ModelSerializer):# 显示指明字段,bread = serializers.IntegerField(max_value=100, min_value=20)sms_code = serializers.CharField(max_length=6, min_length=6)class Meta:model = BookInfo # 指定生成字段的模型类# fields = ('btitle', 'bread') # 指定模型类中的字段# fields = '__all__' # 指定模型类中的字段exclude =('btitle',) # 取反操作,除了这个字段外的其他字段都生成
每次修改完,如果想看修改结果,需要重新退出进入python manage.py shell。
显示指明字段也可以,新增没有的字段,例如新增一个sms_code字段
class BookModelSerializer(serializers.ModelSerializer):# 显示指明字段,bread = serializers.IntegerField(max_value=100, min_value=20)sms_code = serializers.CharField(max_length=6, min_length=6)class Meta:model = BookInfo # 指定生成字段的模型类# fields = ('btitle', 'bread') # 指定模型类中的字段# fields = '__all__' # 指定模型类中的字段exclude =('btitle',) # 取反操作,除了这个字段外的其他字段都生成
第二种方式,使用extra_kwargs,也可以对已有的字段进行修改,或者新增没有的字段校验
class BookModelSerializer(serializers.ModelSerializer):# 显示指明字段,可以指明已有的字段,还可以指明没有的字段bread = serializers.IntegerField(max_value=100, min_value=20)sms_code = serializers.CharField(max_length=6, min_length=6)class Meta:model = BookInfo # 指定生成字段的模型类# fields = ('btitle', 'bread') # 指定模型类中的字段fields = '__all__' # 指定模型类中的字段# vexclude =('btitle') # 取反操作,除了这个字段外的其他字段都生成# 添加修改字段的选项参数extra_kwargs = {"bcomment":{'max_value': 80},'btitle':{'min_length': 5}}
注意在使用新增未存在的字段时候,需要使用fields = '__all__' 或者fields = ('btitle', 'bread') 定义出来这个字段,否则会报错,找不到这个字段。
三、还有一个添加选项参数的方法
read_only_fields = ('btitle',) ,给字段增加read_only的参数
class BookModelSerializer(serializers.ModelSerializer):# 显示指明字段,可以指明已有的字段,还可以指明没有的字段bread = serializers.IntegerField(max_value=100, min_value=20)sms_code = serializers.CharField(max_length=6, min_length=6)class Meta:model = BookInfo # 指定生成字段的模型类# fields = ('btitle', 'bread') # 指定模型类中的字段fields = '__all__' # 指定模型类中的字段# vexclude =('btitle') # 取反操作,除了这个字段外的其他字段都生成# 给字段增加 read_only的选项参数read_only_fields = ('btitle',)# 添加修改字段的选项参数extra_kwargs = {"bcomment":{'max_value': 80},'btitle':{'min_length': 5}}
总结:
ModelSerializer可以对我们指定的模型类,自动的生成字段内容
ModelSerializer与常规的Serializer区别
1、基于模型类自动生成一些列字段
2、基于模型类自动为Serializer生成validators,比如unique_together
3、包含默认的create()和update()的实现
这篇关于DRF-模型类序列化器的使用ModelSerializer的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!