中国轻纺城网上交易市场,德惠供求世界,彼岸花盛开之夜动漫
基于seriallizer类进行简化
https://www.cnblogs.com/pythonywy/p/11455508.html
导入from rest_framework import serializers
与基础serializer类后续使用的作用相似
class 自定义名称(serializers.modelserializer): class meta: model=对应的模型 fields=('参与序列化和反序列的字段1','参与序列化和反序列的字段2') #fields='__all__' 为所有字段 # exclude = ('id', 'is_delete') # 刨除某些字段 # depth = 1 # 跨表自动深度(展示外键表的所有字段)
注意点
fields
与exclude
不能共存depth
不能控制显示字段,与外键相关的表会全部显示出来例如有两个模型a
与b
,他们的c字段有外键关联
modles.py
class b(models.model): name = models.charfield(max_length=60) class a(models.model): uid = models.foreignkey(b,'id') @property #下面调用函数名的时候自动运行函数 def b_name(self): #这里的self是a类 return self.uid.name class amodelserializer(serializers.modelserializer): class meta: model=a #这里导入a会把a里面的所有名称空间存在的都进行导入 fields=('b_name')
class b(models.model): name = models.charfield(max_length=60) class a(models.model): uid = models.foreignkey(b,'id') #方法一 class bmodelserializer(serializers.modelserializer): class meta: model=b fields=('b_name') class bmodelserializer(serializers.modelserializer): b_name = bmodelserializer() class meta: model=a #这里导入a会把a里面的所有名称空间存在的都进行导入 fields=('b_name') #方法二 #通过自定义字段 class bmodelserializer(serializers.modelserializer): b_name = serializers.serializermethodfield() def get_b_name(self, obj: models.a): return a.uid.name class meta: model=a #这里导入a会把a里面的所有名称空间存在的都进行导入 fields=('b_name')
反序列话约数条件设置
class 自定义名称(serializers.modelserializer): class meta: model=对应的模型 fields=('参与序列化和反序列的字段1','参与序列化和反序列的字段2') extra_kwargs ={ 参与序列化和反序列的字段1:{ 'required': true, #必须填写的字段 'min_length': 3, #.....约数条件 'error_messages': { 'min_length': '太短' } } }
只读只写属性设置
class 自定义名称(serializers.modelserializer): class meta: model=对应的模型 fields=('参与序列化和反序列的字段1','参与序列化和反序列的字段2') extra_kwargs ={ 参与序列化和反序列的字段1:{ 'write_only': true #只写 } 参与序列化和反序列的字段2:{ 'read_only': true #只读 } }
数据没有修改
class bookapiview(apiview): def get(self, request, *args, **kwargs): book_query = models.book.objects.all() #假设查我们定义的书的这个模型 book_ser = serializers.bookmodelserializer(book_query, many=true) return response(0, 'ok', results=book_ser.data) #用drf框架自带的response
有添加修改相关操作
class bookapiview(apiview): def post(self, request, *args, **kwargs): pk=kwargs.get('pk') book_obj = models.book.objects.get('pk') book_ser = serializers.bookmodelserializer(instance=book_obj,data=request.data) #根据传进来的数据机芯判断 #如果多个数据为book_set = serializers.bookmodelserializer(data=request.data many=true) if book_ser.is_valid(): #这里是我们设置的modelserializer的约数条件看是否能通过 book_ser.save() #这里他会自动进行判断是create方法还是update方法 return response(0, 'ok',results=book_ser.data) else: return response(1, '添加失败', results=book_ser.errors)#用drf框架自带的response
注意点
:save源码中我们可以看到instance
有值调用updata方法,没有值调用create方法.所以修改必须加instance参数,传的参数基本上是修改之前的对象有关删除
class bookapiview(apiview): def post(self, request, *args, **kwargs): book_ser = serializers.bookmodelserializer(data=request.data) #根据传进来的数据机芯判断 #如果多个数据为book_set = serializers.bookmodelserializer(data=request.data many=true) if book_ser.is_valid(): #这里是我们设置的modelserializer的约数条件看是否能通过 book_ser.deleter() #这里他会自动进行判断是create方法还是update方法 return response(0, 'ok',results=book_ser.data) else: return response(1, '删除失败', results=book_ser.errors)#用drf框架自带的response
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Python爬虫:Request Payload和Form Data的简单区别说明
浅谈Python中threading join和setDaemon用法及区别说明
Python3-异步进程回调函数(callback())介绍
python继承threading.Thread实现有返回值的子类实例
Python中使用threading.Event协调线程的运行详解
网友评论