1,添加
在序列化器A的create方法中
@atomic
def create(self, validated_data):
self.pre_create(validated_data)
attach_id_list = validated_data.pop('attach_id_list', [])
parent = validated_data.get('parent', None)
if parent:
if parent.status != Ownership.m_status.FHW_NORMAL.to_dict():
raise JicException("------")
parent.status = Ownership.m_status.FHW_INVALID.to_dict()
parent.save()
status = Ownership.m_status.FHW_NORMAL.to_dict()
validated_data['status'] = status
instance = Ownership.objects.create(**validated_data)
save_attach(instance, attach_id_list)
owner_ship = instance
#获取请求
request =self.context.get("request")
spaces=request.data.get("space_ids")
create_by = validated_data.get("create_by", None)
update_by = validated_data.get("update_by", None)
create_time = time.strftime("%Y-%m-%d",time.localtime())
update_time = time.strftime("%Y-%m-%d",time.localtime())
if spaces:
for space in spaces:
my_dict = {"owner_ship_id": owner_ship.id, "space_id": space, "create_by": create_by, "update_by": update_by, "create_time": create_time, "update_time": update_time}
#向另一个modle中保存数据
ModleB.objects.create(**my_dict)
return instance
2,查询
space_name = serializers.SerializerMethodField(help_text="----", read_only=True)
def get_space_name(self,obj):
shipId = obj.id
myObj = OwnershipRoom.objects.filter(owner_ship_id=shipId).all()
spaceName = []
if myObj:
for space in myObj:
spaceId = space.space_id
spaceNo = LeaseSpace.objects.filter(id=spaceId).values("no")
spaceName.append(spaceNo)
return spaceName
序列化器:
序列化:由数据库查询后的数据格式化成json返回给前端进行展示
反序列化:由页面提交的数据,尽心校验格式化后存入数据库
如何看字段是序列化还是反序列化:看看定义的时候有read_only=True即为序列化字段,write_only=True 即为反序列字段,什么都不写代表二者皆可
,这时候需要注意 就像将字段写在了fields中 而序列化器中没有定义,代表既可以序列化又可以反序列化。
序列化器中一些关键的参数:
required=False: 表明该字段在反序列化器中非必须输入,默认是True
validtors:该字段使用的验证器
当进行序列化时(向前台返回)是可以根据自己的需要定义方法 牵扯到那些表直接用该表的模型类进行操作(主要是查询)记得添加read_only=True
将需要返回的字段名再添加到fields中
希望有所帮助!!!