留恋一九七七,csb,阮丽嘉
比如我们创建一个bookinfoserializer
class bookinfoserializer(serializers.modelserializer): """图书数据序列化器""" class meta: model = bookinfo fields = '__all__'
我们可以在python manage.py shell中查看自动生成的bookinfoserializer的具体实现
>>> from booktest.serializers import bookinfoserializer >>> serializer = bookinfoserializer() >>> serializer bookinfoserializer(): id = integerfield(label='id', read_only=true) btitle = charfield(label='名称', max_length=20) bpub_date = datefield(allow_null=true, label='发布日期', required=false) bread = integerfield(label='阅读量', max_value=2147483647, min_value=-2147483648, required=false) bcomment = integerfield(label='评论量', max_value=2147483647, min_value=-2147483648, required=false) image = imagefield(allow_null=true, label='图片', max_length=100, required=false)
1)使用字段来明确字段,__all__
表名包含所有字段,也可以写明具体哪些字段,如
class bookinfoserializer(serializers.modelserializer): """图书数据序列化器""" class meta: model = bookinfo fields = ('id', 'btitle', 'bpub_date')
2)使用排除可以明确排除掉哪些字段
class bookinfoserializer(serializers.modelserializer): """图书数据序列化器""" class meta: model = bookinfo exclude = ('image',)
3)默认modelserializer使用主键作为关联字段,但是我们可以使用depth来简单的生成嵌套表示,depth应该是整数,表明嵌套的层级数量。
class heroinfoserializer2(serializers.modelserializer): class meta: model = heroinfo fields = '__all__' depth = 1
形成的序列化器如下:
heroinfoserializer(): id = integerfield(label='id', read_only=true) hname = charfield(label='名称', max_length=20) hgender = choicefield(choices=((0, 'male'), (1, 'female')), label='性别', required=false, validators=[<django.core.valators.minvaluevalidator object>, <django.core.validators.maxvaluevalidator object>]) hcomment = charfield(allow_null=true, label='描述信息', max_length=200, required=false) hbook = nestedserializer(read_only=true): id = integerfield(label='id', read_only=true) btitle = charfield(label='名称', max_length=20) bpub_date = datefield(allow_null=true, label='发布日期', required=false) bread = integerfield(label='阅读量', max_value=2147483647, min_value=-2147483648, required=false) bcomment = integerfield(label='评论量', max_value=2147483647, min_value=-2147483648, required=false) image = imagefield(allow_null=true, label='图片', max_length=100, required=false)
4)显示指明字段,如:
class heroinfoserializer(serializers.modelserializer): hbook = bookinfoserializer() class meta: model = heroinfo fields = ('id', 'hname', 'hgender', 'hcomment', 'hbook')
5)指明只读字段
可以通过read_only_fields指明只读字段,即仅用于序列化输出的字段
class bookinfoserializer(serializers.modelserializer): """图书数据序列化器""" class meta: model = bookinfo fields = ('id', 'btitle', 'bpub_date', 'bread', 'bcomment') read_only_fields = ('id', 'bread', 'bcomment')
我们可以使用extra_kwargs参数为modelserializer添加或修改原有的选项参数
class bookinfoserializer(serializers.modelserializer): """图书数据序列化器""" class meta: model = bookinfo fields = ('id', 'btitle', 'bpub_date', 'bread', 'bcomment') extra_kwargs = { 'bread': {'min_value': 0, 'required': true}, 'bcomment': {'min_value': 0, 'required': true}, } # bookinfoserializer(): # id = integerfield(label='id', read_only=true) # btitle = charfield(label='名称', max_length=20) # bpub_date = datefield(allow_null=true, label='发布日期', required=false) # bread = integerfield(label='阅读量', max_value=2147483647, min_value=0, required=true) # bcomment = integerfield(label='评论量', max_value=2147483647, min_value=0, required=true)
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
新手学习Python2和Python3中print不同的用法
Python基于os.environ从windows获取环境变量
网友评论