精华内容
下载资源
问答
  • 2020-05-25 15:36:01

    问题:
    定义好了序列化器后有没有遇到过想要序列化的数据表中有外键的情况,我们需要的这个和外键关联的数据

    model.py

    # 报警表
    class Police(models.Model):
        # 报警类型
        police = models.CharField(max_length=50)
        # 开始范围
        begin = models.CharField(max_length=20,null=True)
        # 结束范围
        end = models.CharField(max_length=20,null=True)
        # 阈值
        value = models.CharField(max_length=20)
        # 货物类型(w)
        cargo = models.models.ForeignKey(Cargo,on_delete=models.CASCADE)
    
        class Meta:
            db_table = 'police'
    
    # 货物类型
    class Cargo(models.Model):
        # 货物名
        name = models.CharField(max_length=50)
        # 设备类型
        equ = models.CharField(max_length=50)
        # 描述
        brief = models.CharField(max_length=200)
        # 创建时间
        create_time = models.DateField(default = timezone.now)
        # 更新时间
        update_time = models.DateTimeField(auto_now=True)
        # 延迟时间
        delay = models.IntegerField()
        # 记录间隔
        record = models.IntegerField()
        # 理想开始范围
        begin = models.CharField(max_length=20)
        # 理想结束范围
        end = models.CharField(max_length=20)
    
        class Meta:
            db_table = 'cargo'
    

    定义嵌套序列化器:

    class PoliceSer(serializers.ModelSerializer):   # 有外键的一方
        class Meta:
            model = Police
            fields = '__all__'
    
    # 货物类型
    class CargoSer(serializers.ModelSerializer):
    
        class Meta:
            model = Cargo
            fields = '__all__'
    
    

    解决方法:
    将PoliceSer变为嵌套序列化
    第一种

    class PoliceSer(serializers.ModelSerializer):   # 有外键的一方
        cargo = CargoSer()    # 将外键字段序列化
        class Meta:
            model = Police
            fields = '__all__'
    

    第二种

    class PoliceSer(serializers.ModelSerializer):   # 有外键的一方
        class Meta:
            model = Police
            fields = '__all__'
            depth = 1   # 会去找是外键的字段然后序列化      
            # 1 代表的是序列化的深度,意思就是序列化的的数据表中加入还有关联的外键是否序列化
    

    以上方法是建立在你的那个外键字段是ForeignKey的情况下
    如果你的外键是逻辑外键(IntegerField)
    以上方法就会报错


    然后只能使用for来序列化

    class CargoView(APIView):
    
        def get(self,request):
            # ser = PoliceSer(Police.objects.all(),many=True).data
            cargo = Cargo.objects.filter()
            ser = CargoSer(cargo,many=True).data
            for i in ser:
                police = Police.objects.filter(cargo=i.get("id"))
                p = PoliceSer(police,many=True).data
                i['police'] = p
            return Response(ser)
    
    更多相关内容
  • drf嵌套序列

    千次阅读 2020-06-11 12:11:26
    在我们序列化的过程中,肯定会遇到嵌套序列化,不管是一对多嵌套还是多对一嵌套,在序列化器中我们使用参数source就解决了,为了解决N+1问题,我们使用select_related和prefetch_related就可以解决,但是还有一个...

    在我们序列化的过程中,肯定会遇到嵌套序列化,不管是一对多嵌套还是多对一嵌套,在序列化器中我们使用参数source就解决了,为了解决N+1问题,我们使用select_related和prefetch_related就可以解决,但是还有一个问题就是在嵌套的过程中我们要对第二个序列化器的数据进行筛选,比如要id_delete=False,怎么办那?
    解决办法:

    class FilterdListSerializer(ListSerializer):
        def to_representation(self, data): # data为试图中传递过来的数据
            data = data.filter(is_del=False)   # 过滤已删除的
            return super().to_representation(data)
    
    class GradeSerializer(ModelSerializer):
        student = StudentSerializer(many=True)
    
        class Meta:
            model = Grade
            fields = ('name', 'is_del', 'student')
            list_serializer_class = FilterdListSerializer
    
    
    class SchoolSerializer(ModelSerializer):
        grade = GradeSerializer(many=True)
    
        class Meta:
            model = School
            fields = ('name', 'is_del', 'grade')
    
    展开全文
  • python使用嵌套序列

    千次阅读 2016-05-10 11:05:11
    创建嵌套序列 嵌套列表或元组的创建方法跟普通列表或元组差不多:输入各个元素,并以逗号隔开。区别在于嵌套序列的元素可以是整个列表或元组。 nested=["first",("second","third"),["fourth",

    列表和元组都可以存放任何类型的数据,列表可以含有其他的列表或元组,元组也可以含有其他的元组或列表。这叫嵌套序列。嵌套序列就是序列中有序列,它是组织复杂信息的好办法。

    创建嵌套序列

    嵌套列表或元组的创建方法跟普通列表或元组差不多:输入各个元素,并以逗号隔开。区别在于嵌套序列的元素可以是整个列表或元组。

    nested=["first",("second","third"),["fourth","fifth","sixth"]]
    print(nested)
    输出:


    虽然可以用任意数量的列表和元组来创建嵌套序列,但最好还是使用一致的模式。

    scores=[("zhang",100),("wang",98),("li",78)]
    print(scores)
    
    输出:


    访问嵌套元素

    访问嵌套序列中的元素跟访问普通序列的一样,都是用索引:

    scores=[("zhang",100),("wang",98),("li",78)]
    print(scores[0])
    print(scores[0][0])
    
    输出:


    序列的解包

    如果已经知道序列中有多少个元素,就可以在一行代码中将它们分别赋值给相应的变量:

    name,score=("shemp",175)
    print(name)
    print(score)
    输出:


    就就叫解包(unpacking),它对任何序列类型都有效。但是要记住,变量的数量要跟序列中的元素数量相等,否则就会产生错误。



    展开全文
  • premiere9嵌套序列.wmv

    2020-02-13 09:56:10
    Premiere提供了采集、剪辑、调色、美化音频、字幕添加、输出、DVD刻录的一整套流程,并和其他Adobe软件高效集成,使您足以完成在编辑、制作、工作流上遇到的所有挑战,满足您创建高质量作品的要求。
  • DRF-嵌套序列

    2022-02-20 22:02:58
    有三种返回嵌套的形式 1、返回关联的英雄id PrimaryKeyRelatedField 2、返回关联英雄的模型类的str方法值 3、想返回英雄类里的其他字段值,需要再定义一个英雄的序列化器,需要注意的是,嵌套序列化器,必须先于这...
    from django.db import models
    
    # Create your models here.
    
    
    class BookInfo(models.Model):
        btitle = models.CharField(max_length=20, verbose_name='名称')
        bpub_date = models.DateField(verbose_name='发布时间')
        bcomment = models.IntegerField(default=0, verbose_name='评论量')
        is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')
    
        class Meta:
            db_table = 'tb_books'  # 指明数据表名
            verbose_name = '图书'  # 在admin站点中显示的名称
            verbose_name_plural = 'verbose_name' # 显示复数的名称
    
        def __str__(self):
            return self.btitle
    
    
    # 定义英雄模型类HeroInfo
    class HeroInfo(models.Model):
        GENDER_CHOICES = (
            (0, 'male'),
            (1, 'female')
        )
        hname = models.CharField(max_length=20, verbose_name='名称')
        hgender = models.SmallIntegerField(choices=GENDER_CHOICES, default=0,
                                           verbose_name=' 性别')
        hcomment = models.CharField(max_length=200, null=True, verbose_name='描述信息')
        hbook = models.ForeignKey(BookInfo, on_delete=models.CASCADE, verbose_name='图书')
        is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')
    
        class Meta:
            db_table = 'tb_heros'
            verbose_name = '英雄'
            verbose_name_plural = verbose_name
    
        def __str__(self):
            return self.hname

    INSERT into tb_heros(hname,hgender,hbook_id,hcomment,is_delete) VALUES
    ('郭靖',1,1,'降龙十八掌',0),
    ('黄蓉',1,1,'打狗棍',0),
    ('黄药师',1,2,'弹指',0),
    ('欧阳锋',1,3,'蛤蟆功',0),
    ('乔峰',1,3,'降龙十八掌',0),
    ('段誉',1,4,'六脉神剑',0),
    ('虚竹',1,4,'天上',0)

    以上为造的数据。

    一、一对多的形式

    book表查询的时候返回英雄表的里数据,但是book表里面没有外键,这个时候在book序列化器里新增一个,英雄表的小写类名加set的形式,例如heroinfo_set。

    有三种返回嵌套的形式

    1、返回关联的英雄id PrimaryKeyRelatedField

    2、返回关联英雄的模型类的str方法值

    3、想返回英雄类里的其他字段值,需要再定义一个英雄的序列化器,需要注意的是,嵌套的序列化器,必须先于这个序列化器,否则代码加载的时候,找不到这个新建序列化器就报错了

    还有如果在英雄类的里外键字段,有一个related_name='hero' ,就可以用hero 代替heroinfo了,也是一种方法。

    from rest_framework import serializers
    
    
    class HeroSerializer(serializers.Serializer):
        # 英雄序列化器
        hname = serializers.CharField()
        hcomment = serializers.CharField()
    
        # 多对一的场景
        # hbook = serializers.PrimaryKeyRelatedField()
        hbook = serializers.StringRelatedField()
    
    # 自定义序列化器,本质就是一个类
    class BookSerializer(serializers.Serializer):
    
        # 序列化返回的字段
        btitle = serializers.CharField()
        bpub_date = serializers.DateField()
        bcomment = serializers.IntegerField()
        # 一对多的场景,总共有三种返回嵌套的形式:
        # 1、返回关联的英雄id PrimaryKeyRelatedField
        # heroinfo_set = serializers.PrimaryKeyRelatedField(read_only=True, many=True)
        # 2、返回关联英雄的模型类的str方法值
        # heroinfo_set = serializers.StringRelatedField(read_only=True, many=True)
        # 3、想返回英雄类里的其他字段值,需要再定义一个英雄的序列化器,需要注意的是,嵌套的序列化器,
        # 必须先于这个序列化器,否则代码加载的时候,找不到这个新建序列化器就报错了
        heroinfo_set = HeroSerializer(many=True)
    
    

    二、多对一的形式

    多对一的形式,这个就好比英雄类的数据返回要带上图书的数据,英雄类里面有一个外键,可以直接使用外键形式关联

    hbook = serializers.PrimaryKeyRelatedField()

    hbook = serializers.StringRelatedField()

    总结:

     

     

    展开全文
  • 想要用python自已手动序列嵌套类,就要明白两个问题: 1.Json是什么? 2.Json支持什么类型? 答案显而易见 Json就是嵌套对象 Json在python中支持列表,字典(当然也支持int,string…..,不过说这个也没多大必要) ...
  • 关联对象嵌套序列
  • 但是当服务间调用时,含有内部类嵌套的dto无法被序列化,导致接口请求接口正常返回,但是无法被正常接收。 原因 对于内部类来说,静态的内部类才可以被序列化,而内部类不能被序列化!!! 参考链接:...
  • 主要介绍了Python 如何展开嵌套序列,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
  • Django 关联对象的嵌套序列

    千次阅读 2020-01-17 22:08:13
    ####### 如果需要序列化的数据中包含有其他关联对象,则对关联对象数据的序列化需要指明。 例如,在定义英雄数据的序列化器时,外键hbook(即所属的图书)字段如何序列化? # 为多对一关系 # 多 # class ...
  • django序列化器嵌套

    2022-04-18 15:01:55
    django序列化器嵌套方法
  • DRF序列化关于嵌套序列化极其消耗性能问题的解决 DRF序列化给我们提供了一个很方便的序列化与反序列化的方法,但是如果在序列化器中使用嵌套,会极其消耗性能。 class Qctestroombeta(BaseModel): id = models....
  • 我的接口有jackson序列化对象的问题.我有课class Point implements PointView {private String id;private String name;public Point() {}public Point(String id, String name) {this.id = id;this.name = name;}@...
  • 嵌套对象的序列化我们希望通过实际的例子来阐述功能,因此让我们来扩展我们的UserSimple模型。在之前的发布中,user模型仅仅有一些基本的Java类型:public class UserSimple {String name;String email;boolean ...
  • Rest Framework 关联对象嵌套序列

    千次阅读 2019-04-16 18:24:22
    关联对象嵌套序列化 如果需要序列化的数据中包含有其他关联对象,则对关联对象数据的序列化需要指明。 例如,在定义英雄数据的序列化器时,外键Type(即所属的分类)字段如何序列化? 对于关联字段,可以...
  • django: django rest framework 嵌套序列

    千次阅读 2018-07-10 21:14:24
    django: django rest framework 嵌套序列化 django rest framework序列化在其他的章节中进行了讲解,
  • label = 'order' @property def users(self): queryset = self.booking_info.all() return [{"uid": query.uid} for query in queryset] 个人偏向使用该方法,这样可以自定义需要输出的字段,上面嵌套的方案,fields...
  • Android通过Parcelable和Serializable实现各种类型嵌套序列
  • Java多层嵌套序列

    2021-06-21 22:10:48
    这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、...
  • Django REST Framework的可写嵌套模型序列化程序
  • serializer嵌套序列

    千次阅读 2017-08-05 18:57:27
    场景描述:以前用序列化做比较简单的传递需要展示的数据,现在需要在一个序列化里面嵌套另外一个序列化。试一下serializer更多的玩法 * 业务逻辑基本介绍: 房间与车位间一对多关系,车位与房间存在外键关联,...
  • //序列化 Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create(); String json = gson.toJson(netFenhuTask.getTaskImage(), new TypeToken<NetFenhuTaskImage>(){}.getType()); ...
  • 嵌套对象序列化 与简单对象序列化基本一致,会把 嵌套对象作为一个json 的 子 json对象 如下格式 inner 为 嵌套对象的属性名 { "nick": "A", "mobile": "B", &...
  • Pr:子剪辑子序列嵌套编组

    千次阅读 2020-04-05 00:00:00
    所以,如果此时删除了音频轨道上的音频,即表示时间轴上的嵌套序列已经不再是原始的子序列了,对应的视频将没有声音。尽管双击嵌套序列剪辑后可在子序列面板看到有音频的原始子序列。 提示:单个项目可包含具有不同...
  • 在采用 gin 框架写后端api时,经常会有嵌套形式的json串,如何使用golang进行序列化呢,此文实例详细说明。 返回vue前端的嵌套的json串 实例json串结构如下: {"data": { "userInfo": { "id":1, "username...
  • json反序列化成 自定义的ResponseResult, 但是无法反序列化 T data属性, 例如: ResponseResult<List>, 只能反序列化code,message, T data就不行 v1 JSONObject.parseObject(json, Result.class);,编译器就...
  • 我需要一种方法:创建完整对象的JSON字符串(带有私有属性和嵌套对象-带有私有属性)。从JSON字符串创建一个具有正确类型和所有嵌套对象的新对象。我猜它需要递归。如果我只是将对象转换为数组,则使用的命名空间最终...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 153,106
精华内容 61,242
关键字:

如何创建嵌套序列