Django序列化器A向ModleB中添加和查询数据

本文详细介绍了Django序列化器的使用,包括在序列化器的`create`方法中处理数据创建,以及如何在序列化器中自定义方法获取相关查询结果。内容涉及原子操作、数据验证、模型间关联操作以及序列化字段的定义和作用。同时,文章还阐述了序列化器在序列化和反序列化过程中的工作原理,并提供了实例说明。
摘要由CSDN通过智能技术生成

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中

希望有所帮助!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值