首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用django-mptt查询数据库,查找至少包含一个子类别和至少一个产品的所有根类别

基础概念

Django-MPTT 是 Django 的一个第三方应用,用于实现修改后的预排序遍历树(Modified Preorder Tree Traversal)算法,这种算法常用于处理具有层级关系的数据,如类别树。

根类别 是指在树结构中没有父类别的节点。

子类别 是指在树结构中有父类别的节点。

相关优势

使用 Django-MPTT 可以高效地查询和管理具有层级关系的数据,特别是在需要频繁进行层级遍历和查询的场景下。它提供了方便的方法来获取一个节点的所有子节点或所有父节点,以及判断节点之间的关系。

类型与应用场景

Django-MPTT 主要用于处理具有层级结构的数据,如:

  • 网站的导航菜单
  • 商品分类系统
  • 文件和目录结构
  • 组织机构树

查询至少包含一个子类别和至少一个产品的所有根类别

假设我们有两个模型:CategoryProduct,其中 Category 使用 Django-MPTT 来管理层级关系。

代码语言:txt
复制
from django.db import models
from mptt.models import MPTTModel, TreeForeignKey

class Category(MPTTModel):
    name = models.CharField(max_length=100)
    parent = TreeForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='children')

class Product(models.Model):
    name = models.CharField(max_length=100)
    category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name='products')

要查询至少包含一个子类别和至少一个产品的所有根类别,可以使用以下查询:

代码语言:txt
复制
from django.db.models import Q

# 获取所有根类别
root_categories = Category.objects.filter(parent__isnull=True)

# 过滤出至少包含一个子类别和至少一个产品的根类别
filtered_root_categories = root_categories.filter(
    Q(children__isnull=False) & Q(products__isnull=False)
).distinct()

解释

  1. 获取所有根类别Category.objects.filter(parent__isnull=True) 查询所有没有父类别的节点,即根类别。
  2. 过滤条件
    • Q(children__isnull=False):确保该类别至少有一个子类别。
    • Q(products__isnull=False):确保该类别至少有一个产品。
  • distinct():使用 distinct() 方法去除重复的结果,因为一个根类别可能有多个子类别或多个产品。

可能遇到的问题及解决方法

问题:查询结果不正确,可能包含不符合条件的类别。

原因

  • 数据库中存在不一致的数据,例如某些类别没有正确设置父类别。
  • 查询条件可能不够严格,导致某些不符合条件的类别被包含进来。

解决方法

  • 检查数据库中的数据,确保所有类别的层级关系正确设置。
  • 使用更严格的查询条件,例如确保子类别和产品数量大于零:
代码语言:txt
复制
filtered_root_categories = root_categories.filter(
    Q(children__isnull=False) & Q(products__count__gt=0)
).distinct()

通过这种方式,可以确保查询结果准确无误。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

重温数据结构:理解 B 树、B+ 树特点及使用场景

了解了节点的差异后,来看看 B 树的定义,一棵 B 树必须满足以下条件: 若根结点不是终端结点,则至少有2棵子树 除根节点以外的所有非叶结点至少有 M/2 棵子树,至多有 M 个子树(关键字数为子树减一...B 树中如何查找数据 因为 B 树的子树大小排序规则,因此在 B 树中查找数据时,一般需要这样: 从根节点开始,如果查找的数据比根节点小,就去左子树找,否则去右子树 和子树的多个关键字进行比较,找到它所处的范围...这个拆的过程比较复杂,首先要确定根节点保留几个关键字,由于“非叶子节点的根节点至少有 2 棵子树”的限制,那就至少需要两个关键字分出去,又因为“子树数是关键字数+1”,如果根节点有两个关键字,就得有三个子树...使用场景 文件系统和数据库系统中常用的B/B+ 树,他通过对每个节点存储个数的扩展,使得对连续的数据能够进行较快的定位和访问,能够有效减少查找时间,提高存储的空间局部性从而减少IO操作。...第三点,叶子节点包含了全部的数据,并且按顺序排列,B+ 树使用一个链表将它们排列起来,这样在查询时效率更快。

3K41

面试官问我索引为什么这快?我好像解释不清楚了

根节点,只有至少有2个节点(要么极端情况,就是一棵树就一个根节点,单细胞生物,即是根,也是叶,也是树)。...非根非叶的节点至少有的Ceil(m/2)个子树(Ceil表示向上取整,图中3阶B树,每个节点至少有2个子树,也就是至少有2个叉)。...B+ 树是一种树数据结构,是一个n叉树,每个节点通常有多个孩子,一颗B+树包含根节点、内部节点和叶子节点。根节点可能是一个叶子节点,也可能是一个包含两个或两个以上孩子节点的节点。...B+树与B树差异 有k个子节点的节点必然有k个元素 非叶子节点仅具有索引作用,跟记录有关的信息均存放在叶子节点中 树的所有叶子节点构成一个有序链表,可以按照元素排序的次序遍历全部记录 B树和B+树的区别在于...,B+树的非叶子节点只包含导航信息,不包含实际的值,所有的叶子节点和相连的节点使用链表相连,便于区间查找和遍历。

31520
  • 机器学习之K近邻(KNN)算法

    二叉搜索:对于目标点,通过二叉搜索,能够很快在KD树里面找到包含目标点的叶子节点。 回溯:为找到最近邻,还需要进行回溯操作,算法沿搜索路径反向查找是否有距离查询点更近的数据点。...更新最近邻:返回叶子节点的父节点,检查另一叶子节点包含的超矩形体是否和超球体相交,如果相交就到这个子节点中寻找是否有更近的最近邻,有的话就更新最近邻。...划分子超球体:从超球体中选择一个离超球体中心最远的点,然后选择第二个点离第一个点最远,将球中所有的点分配到离这两个聚类中心最近的一个。...然后计算每个聚类的中心,以及聚类能够包含它所有数据点所需的最小半径,这样我们便得到两个子超球体,和KD树中的左右子树对应。 递归:对上述两个子超球体,递归执行步骤2,最终得到球树。 ?...然后和KD树查找相同,检查兄弟结点,如果目标点到兄弟结点中心的距离超过兄弟结点的半径与当前的上限值之和,那么兄弟结点里不可能存在一个更近的点。否则进一步检查位于兄弟结点以下的子树。

    1.4K20

    树结构系列(三):B树、B+树

    而 B 树的出现是为了解决这个问题,其可以一次性读入许多数据。一个节点不再只是存储一个数值,而是存储一个分片的数据。这样就可以避免频繁去读取磁盘数据,造成频繁的 IO 访问,造成查找速度瓶颈。...B 树是一种平衡的多分树,通常我们说 m 阶的 B 树,它必须满足如下条件: 每个节点最多只有 m 个子节点。 每个非叶子节点(除了根)具有至少 ⌈m/2⌉ 子节点。...如果根不是叶节点,则根至少有两个子节点。 具有 k 个子节点的非叶节点包含 k -1 个键。 所有叶子都出现在同一水平,没有任何信息(高度一致)。 ?...所有关键字查询的路径长度相同,导致每一个数据的查询效率相当。而对于 B 树来说,因为其每个节点都存具体的数据,因此其查询速度可能更快,但是却并不稳定。...B+ 树只需要去遍历叶子节点就可以实现整棵树的遍历。在数据库中基于范围的查询是非常频繁的,因此 MySQL 的 Innodb 引擎就使用了 B+ 树作为其索引的数据结构。

    1.3K10

    B+树

    这个要从几个方面来说了: (1)计算机有一个局部性原理,就是说,当一个数据被用到时,其附近的数据也通常会马上被使用。...假定操作系统一次读取一个节点,并且根节点保留在内存中,那么B树在100万个数据中查找目标值,只需要读取两次硬盘。B 树可以看作是对2-3查找树的一种扩展,即他允许每个节点有M-1个子节点。...B树的结构: 根节点至少有两个子节点 ; 每个节点有M-1个key,并且以升序排列 ; 位于M-1和M key的子节点的值位于M-1 和M key对应的Value之间 ; 其它节点至少有...四、B树与B+树的对比 B和B+树的区别在于,B+树的非叶子结点只包含导航信息,不包含实际的值,所有的叶子结点和相连的节点使用链表相连,便于区间查找和遍历。...1、B树的优点 B树的每一个节点都包含key和value,因此经常访问的元素可能离根节点更近,因此访问也更迅速。

    49320

    手写一个简单的Database7(译文)

    查找特定的value很快(对数时间花销,loga N) 插入一行或者对查询到的数据删除很快(再平衡使用常量时间) 遍历一个范围内的value很快(不像hash map) B-tree不同于二叉树(“B”...但还有一些例外: 叶子节点没有子节点 根节点的子节点数可以少于 m,但至少要有两个 如果根节点也是叶子节点(树只有一个节点),那它有0个子节点 上面的描述的是一个B-tree,SQLite用它来存储索引...为了让事情看起来更容易理解,这棵B-tree的阶(order)设置为3(m=3),也就是说: 每个内部节点最多有三个子节点(m) 每个内部节点最多有两个key 每个内部节点至少两个子节点(m-1) 每个内部节点至少一个...分裂后的两个节点都变成了内部节点,同时也变成了一个新的节点的子节点,这个新的节点变成了根节点。 两层的btree 图中的内部节点(也是根节点)有一个key和两个指针指向子节点(就是那两条线)。...当我们实现这个数据结构时,每个节点都对应一个page。根节点将在page0中存在。节点中的子节点指针将简单的使用包含子节点的page number。 下一次,我们开始实现btree。

    24220

    设计一个数据库的索引模块

    在数据库中,我们存储的通常是大量数据,因此没有办法一次把所有的数据都加载到内存中,从而利用内存的优势进行查询。那数据库是如何快速查询数据的呢?...指针域指向真实的存储数据m 阶(m 代表树的每个节点做多可以包含的子节点数) B- 树的特性有: 所有叶节点处于同一高度 每个节点做多包含 m-1 个键和 m 条链 根节点不为叶子节点时,至少有两个子节点...除了根节点和叶子节点,每个节点最少包含 m/2 个键 它的设计思想是,将相关数据尽量集中在一起,以便一次读取多个数据,减少磁盘的读取次数。...假设现在父节点有 5、15 两个值,就对应 3 个子节点,第一个子节点都是小于 5 的值,最后一个子节点都是大于 15 的值,中间的子节点是 5 到 15 之间的值 B+ 树相比 B- 树的优势就是在于高效的范围查询...假设我们查询所有年龄小于 35 岁的员工,我们只需要找到比 35 小的第一个元素,借助双向指针,就能快速获得所有小于 35 的元素。

    21822

    K近邻法(KNN)原理小结

    然后返回叶子节点的父节点,检查另一个子节点包含的超矩形体是否和超球体相交,如果相交就到这个子节点寻找是否有更加近的近邻,有的话就更新最近邻。...如果不相交那就简单了,我们直接返回父节点的父节点,在另一个子树继续搜索最近邻。当回溯到根节点时,算法结束,此时保存的最近邻节点就是最终的最近邻。     ...我们看看具体的建树流程:     1) 先构建一个超球体,这个超球体是可以包含所有样本的最小球体。     ...2) 从球中选择一个离球的中心最远的点,然后选择第二个点离第一个点最远,将球中所有的点分配到离这两个聚类中心最近的一个上,然后计算每个聚类的中心,以及聚类能够包含它所有数据点所需的最小半径。...对于样本中的所有出现的类别,每个类别会最终得到一个质心点。当我们做预测时,仅仅需要比较预测样本和这些质心的距离,最小的距离对于的质心类别即为预测的类别。这个算法通常用在文本分类处理上。 6.

    1.2K50

    从数据库底层说起,探究用户画像系统的储存该如何选型

    ,所以总体来说画像表应该较为稀疏 大部分标签使用ID进行匹配查找,定位到用户标签再找到用户群体 进行聚合统计的需求较多 需要数据库可以按key查询,聚合统计查询,以及多条件组合查询...B数 B树介绍: 上图是一个 B树 的形式, 每个节点有两个数据元素, 每个节点有三个子节点, 每个叶子节点有两个数据元素 无论是什么形式的 B树, 都具备以下定理, 这四个定理也是保证 B树 插入和删除能够平衡的原因...根节点至少两个子节点 每个中间节点都包含 m 个孩子, 每个中间节点都包含 m - 1 个数据元素 最底层的节点称之为叶子节点, 所有叶子节点都位于同一层 所有节点中的数据元素按照大小排列, 所有子节点按照数据元素的大小排列..., 就可以存放 K 个数据元素(比 B树 多一个) 中间节点不保存数据, 只用来索引, 划分子树值域, 所有数据元素都以卫星的形式和叶子节点关联 叶子节点本身按照 Key 有序 所有中间节点的元素都存在于子节点..., 时间复杂度和折半查找一样, 只有 Log2N B+树 的叶子节点构成了一个类似链表的结构, 所以进行范围查找的时候, 不需要回到父节点, 可以直接在子节点中进行, 所以在进行一些复杂查询的时候比较方便范围取数据

    77510

    为什么二叉查找树不行?

    本文将为大家介绍B树和B+树,首先介绍了B树的应用场景,为什么需要B树;然后介绍了B树的查询和插入过程;最后谈了B+树针对B树的改进。 在谈B树之前,先说一下B树所针对的应用场景。...(2)若根结点不是叶子结点,则至少有两棵子树; 解释:当根节点为叶子节点时,可以没有子树;不为叶子节点时,至少有一个关键字,也就是至少有两棵子树。...(3)除根结点之外的所有非叶子结点至少有⌈m/2⌉个子节点; 解释:⌈m/2⌉表示向上取整,比如m=5时,⌈m/2⌉=3,表示至少有3个子节点,当然最多有5个。...和30中间的指针指向的子节点; (3)拿到关键字15,就是要查找的目标值, 所以直接返回关键字和指针信息(如果树结构里面没有包含所要查找的节点则返回null) 至此我们便完成了...而在B+树中则不同,B+树中任何查询必须要到叶子节点才能获取到,所以每次数据查询的次数都一样,这一点和B树有很大区别。 (2)树的所有叶节点构成一个有序链表,可以按照关键字排序的次序遍历全部记录。

    1.3K20

    Its Design——为什么MySQL使用B+树?

    从上面的查询路径中我们可以发现,我们并不需要遍历所有的节点,而且通过二叉搜索树查找也没有消耗额外的空间。相较于遍历查找,这样子找一个具体的值,效率是大大优化了的。...如果我们查找一个字符或数字,按照这样子的方法,便可以大大的缩短查询时间啦。 2. B树(B-树) 虽然二叉查找树能优化查询,但是大家有没有发现一个问题。...每个非叶子节点(除了根)具有至少ceil(m/2)子节点。(3阶则至少有2个子节点,5阶至少3个...) 如果根不是叶节点,则根至少有两个子节点。...(2阶则至少有2个子节点) 具有k个子节点的非叶节点包含k -1个关键码。...有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。 根节点的最大元素,也就等同于整个B+树的最大元素。

    917113

    Mysql的索引结构为什么要用B+数

    整理了一份328页MySQLPDF文档 一、二叉查找树(BST):不平衡 二叉查找树(BST,Binary Search Tree),也叫二叉排序树,在二叉树的基础上需要满足:任意节点的左子树上所有节点值不大于根节点的值...如果根节点包含子节点,则至少包含 2 个子节点;除根节点外,每个非叶节点至少包含 m/2 个子节点。 拥有 k 个子节点的非叶节点将包含 k - 1 条记录。 所有叶节点都在同一层中。...所谓局部性原理,是指当一个数据被使用时,其附近的数据有较大概率在短时间内被使用。...B树在数据库中有一些应用,如mongodb的索引使用了B树结构。但是在很多数据库应用中,使用了是B树的变种B+树。...**更稳定的查询效率:**B树的查询时间复杂度在1到树高之间(分别对应记录在根节点和叶节点),而B+树的查询复杂度则稳定为树高,因为所有数据都在叶节点。

    1.1K30

    MySQL和B树的不知道的那些事

    总的来说,m阶B树满足以下条件: 每个节点至多可以拥有m棵子树 根节点,只有至少有2个节点(要么极端情况,就是一棵树就一个根节点,单细胞生物,即是根,也是叶,也是树)。...非根非叶的节点至少有的Ceil(m/2)个子树(Ceil表示向上取整,图中5阶B树,每个节点至少有3个子树,也就是至少有3个叉)。...B树的查询过程和二叉排序树比较类似,从根节点依次比较每个结点,因为每个节点中的关键字和左右子树都是有序的,所以只要比较节点中的关键字,或者沿着指针就能很快地找到指定的关键字,如果查找失败,则会返回叶子节点...例如查询图中字母表中的K 从根节点P开始,K的位置在P之前,进入左侧指针 左子树中,依次比较C、F、J、M,发现K在J和M之间 沿着J和M之间的指针,继续访问子树,并依次进行比较,发现第一个关键字K...五、MySQL是如何使用B树的 说明:事实上,在MySQL数据库中,诸多存储引擎使用的是B+树,即便其名字看上去是BTREE。

    27210

    【深入学习MySQL】MySQL的索引结构为什么使用B+树?

    一、二叉查找树(BST):不平衡 二叉查找树(BST,Binary Search Tree),也叫二叉排序树,在二叉树的基础上需要满足:任意节点的左子树上所有节点值不大于根节点的值,任意节点的右子树上所有节点值不小于根节点的值...如果根节点包含子节点,则至少包含 2 个子节点;除根节点外,每个非叶节点至少包含 m/2 个子节点。 拥有 k 个子节点的非叶节点将包含 k - 1 条记录。 所有叶节点都在同一层中。...所谓局部性原理,是指当一个数据被使用时,其附近的数据有较大概率在短时间内被使用。...B树在数据库中有一些应用,如mongodb的索引使用了B树结构。但是在很多数据库应用中,使用了是B树的变种B+树。...更稳定的查询效率:B树的查询时间复杂度在1到树高之间(分别对应记录在根节点和叶节点),而B+树的查询复杂度则稳定为树高,因为所有数据都在叶节点。

    87520

    算法数据结构(一)-B树

    介绍 B树的目的为了硬盘快速读取数据(降低IO操作次树)而设计的一种平衡的多路查找树。目前大多数据库及文件索引,都是使用B树或变形来存储实现。...这是个典型的b树结构,初始因子为1000,高度仅为3的b树,就可以存储1002001000的数据了。 假设要查询最后一个数据: 从硬盘加载根节点搜索,IO一次。...其中根节点中17,35在称为关键字(key) ,实际中往往附带更多复杂类型数据。 可以看出一个节点包含 keys  ChildNotePointer  2部分信息。....  2:每个节点至多有2t-1关键字,每个内节点最多有2t个子节点。     3:每个叶节点具有相同的深度,即树的高度h,而且不包含关键字信息。 度和阶都是描述子节点的数量的。...但如果范围查的话,b树每次都要从根节点查询一遍。 所以在实际应用中,往往采用b树的变形,b+树来存储,只有叶子节点存储数据,每个叶子节点都指向下一个。

    82740

    数据结构与算法夺命连环17问

    它具有以下的特点∶(01)每个节点有零个或多个子节点;(02)没有父节点的节点称为根节点;(03)每一个非根节点有且只有一个父节点;(04)除了根节点外,每个子节点可以分为多个不相交的子树。...这就是B-树的特征之一B树是一种多路平衡查找树,它的每一个节点最多包含K个孩子,K被称为B树的阶,K的大小取决于磁盘页的大小一个m阶的B树具有如下几个特征∶ 1.根结点至少有两个子女。...这就是B树的优势之一 B树的插入删除操作....... 7、B+树 B+树是基于B-权的一种变体,有着比B-树更高的查询性能 一个m阶的B+树具有如下几个特征: 1.有k个子树的中间节点包含有k个元素(...⒉所有查询都要查找到叶子节点,查询性能稳定。 3.所有叶子节点形成有序链表,便于范围查询。 8、字典树 又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变形。...性质 根节点不包含字符,除根节点以外的每一个节点都只包含一个字符﹔ 从根节点到某一节点,路径上经过的字符串连接起来,为该节点对应的字符串 每个节点的所有子节点包含的字符都不相同。

    36120

    苏宁基于 AI 和图技术的智能监控体系的建设

    迫切需要一个工具,可以辅助我们分析系统和指标间关联关系,可视化展示告警的传播路径和影响范围等。产品对策演进针对上述痛点,我们采用领域知识结合 AI 的方法对告警进行收敛,以缓解告 警风暴。...IP 上的告警,而是对所有告警类型的一个抽象总结,目前包含三层(结构如下): 物理机层面的告警、虚拟机层面 的告警、软件层面的告警。...图片知识图谱存储5.1 图数据库引入图数据库是以图数据结构存储和查询数据,图包含节点和边。...图数据库基于节点和边,以一种直观的方式表示这些关系,具有天然可解释性。(3) 图数据库查询语句表达性好,比如查询一跳,两跳数据,不需要像关系型数据库那样做复杂的表关联。(4) 图数据库更灵活。...:图片6.3 根因定位对于上述第一个时间切片中的某个系统,在图数据库中查询该系统下的所有节点构成的子图,以 “苏宁 XXX 系统”这个系统为例,查询得到在“一跳”范围内与该系统下的所有节点之间有关联的节点的关系大致如下

    53410

    「Mysql索引原理(二)」Mysql高性能索引实践,索引概念、BTree索引、B+Tree索引

    每个非叶子节点(除了根)具有至少⌈ m/2⌉子节点。 3. 如果根不是叶节点,则根至少有两个子节点。 4. 具有k个子节点的非叶节点包含k -1个键。...所有关键字查询的路径长度相同,导致每一个数据的查询效率相当; 3)B+树便于范围查询(最重要的原因,范围查找是数据库的常态) B树在提高了IO性能的同时并没有解决元素遍历的我效率低下的问题...而且在数据库中基于范围的查询是非常频繁的,而B树不支持这样的操作或者说效率太低; Mysql数据库中,大多数存储引擎都使用这种索引,存储引擎以不同的方式使用B+Tree索引,性能也各不相同...并不是所有的查询都能使用到B+树索引,B+树索引适用于全键值、键值范围或键前缀查找等,其中键前缀查找只适合用于根据最左前缀的查找。...例如上述例子,索引无法用于查找名字为Bill的人,也无法用于查找某个特定生日的人。 如果查询中有某个列的范围查询,则右边所有列都无法使用索引优化查询。

    1.3K21

    2022年数据工程现状

    这就是为什么它们需要很容易搭配使用。 这种依赖关系发生在不同的层。大型数据集会托管在对象存储中,而工件和服务层数据集将存储在分析引擎和数据库中。在我们知道的架构中,没有看到一个征服另一个的情况。...并不是所有的组织都充分利用了 Metastore 的能力,如果他们唯一的用例是虚拟化表,那么开放式表格式和以它为基础构建的商业产品提供了一个很好的选择。...它还包含像 Databricks lakehouse、Dremio 或 Apache Pinot 这样的湖仓。所有这些工具都有自己支持的数据格式,为的是使查询引擎提供更好的性能。...该产品不断发展,提供了更多的集成(如 Databricks 生态系统),以及额外的可观察性和根源分析功能。或许正是这种成功推动了这一类别的增长,至少从如今在探索这一领域的公司数量来看是如此。...ML 可观察性和监控 这个子类别包括专注于模型质量监控和可观察性的工具。与数据可观察性类别非常相似,这一领域正在成长并逐步形成良好的发展势头。

    46710

    文心一言 VS 讯飞星火 VS chatgpt (245)-- 算法导论18.1 3题

    三、请给出表示 {1,2,3,4,5} 的最小度数为 2 的所有合法 B 树。 文心一言: B树是一种自平衡的树,它保持数据有序,并允许我们对树进行插入、删除和查找操作,同时保持对数的时间复杂度。...在这个问题中,我们要求的是表示集合{1,2,3,4,5}的最小度数为2的所有合法B树。最小度数为2意味着每个非根节点至少有2个子节点(即至少有一个关键字),根节点则至少有一个子节点。...首先,我们需要明确B树的定义和性质。对于最小度数为2的B树,非根节点至少有一个关键字和两个子节点,根节点至少有一个关键字和一个子节点。...然后,每个部分进一步被分为更小的子集,直到每个叶子节点只包含一个关键字。这样的结构将确保每个非根节点至少有两个子节点。...在这个简单的例子中,我们只使用了元素本身作为键值,而在真实的数据库系统中,这些元素可能代表指向实际数据记录的指针或键。

    16620
    领券