四、Django模型
Model
Model (模型) 简而言之即数据模型,是一个Django应用的核心。模型不是数据本身(比如数据表里的数据), 而是抽象的描述数据的构成和逻辑关系。
每个Django的模型(model)实际上是个类,继承了models.Model。每个Model应该包括属性(字段),关系(比如单对单,单对多和多对多)和方法。当你定义好Model模型后,Django的接口会自动帮你在数据库生成相应的数据表(table)。
模型的组成
一个标准的Django模型分别由模型字段、META选项和方法三部分组成。我们接下来对各部分进行详细介绍。Django官方编码规范建议按如下方式排列:
- 定义的模型字段:包括基础字段和关系字段
- 自定义的Manager方法:改变模型
- class Meta选项: 包括排序、索引等等(可选)。
- def str():定义单个模型实例对象的名字(可选)。
- def save():重写save方法(可选)。
- def get_absolute_url():为单个模型实例对象生成独一无二的url(可选)
- 其它自定义的方法
模型的字段
models.Model提供的常用模型字段包括基础字段和关系字段。
基础字段
CharField()
from django.db import modelsclass MyModel(models.Model):my_char_field = models.CharField(max_length=100)
- max_length:必填参数,用于限定字段可以存储的字符的最大长度。
- blank:布尔值,默认为 False。如果设置为 True,则该字段允许为空。
- null:布尔值,默认为 False。如果设置为 True,则 Django 在数据库中使用 NULL 来存储空值。
- default:字段的默认值。
- editable:布尔值,默认为 True。如果设置为 False,这个字段将不会在 Django 管理界面或者任何 ModelForm 中显示。
- help_text:用于在表单字段旁边显示额外的帮助文本。
- verbose_name:为字段设置一个人类可读的名字。
TextField()
from django.db import modelsclass MyModel(models.Model):my_text_field = models.TextField()
- 适合大量文本,max_length = xxx选项可选。
- blank:布尔值,默认为 False。如果设置为 True,则该字段允许为空。
- null:布尔值,默认为 False。如果设置为 True,则 Django 在数据库中使用 NULL 来存储空值。
- default:字段的默认值。
- editable:布尔值,默认为 True。如果设置为 False,这个字段将不会在 Django 管理界面或者任何 ModelForm 中显示。
- help_text:用于在表单字段旁边显示额外的帮助文本。
- verbose_name:为字段设置一个人类可读的名字。
DateField() 和DateTimeField()
from django.db import modelsclass MyModel(models.Model):my_date_field = models.DateField()
-
DateField 用于存储日期,不包括时间
-
可通过default=xx选项设置默认日期和时间。
-
对于DateTimeField: default=timezone.now - 先要from django.utils import timezone
-
如果希望自动记录一次修改日期(modified),可以设置: auto_now=True
-
如果希望自动记录创建日期(created),可以设置auto_now_add=True
-
auto_now_add:布尔值,默认为 False。如果设置为 True,则当对象首次被创建时,字段会被设置为当前日期。
-
auto_now:布尔值,默认为 False。如果设置为 True,则每次对象保存时,字段会被设置为当前日期。
-
blank:布尔值,默认为 False。如果设置为 True,则该字段允许为空。
-
null:布尔值,默认为 False。如果设置为 True,则 Django 在数据库中使用 NULL 来存储空值。
-
default:字段的默认值。这可以是一个日期值,或者一个返回日期值的可调用对象。
-
editable:布尔值,默认为 True。如果设置为 False,这个字段将不会在 Django 管理界面或者任何 ModelForm 中显示。
-
help_text:用于在表单字段旁边显示额外的帮助文本。
-
verbose_name:为字段设置一个人类可读的名字。
EmailField()
- 如不是必填项,可设置blank = True和default = ‘。一般Email用于用户名应该是唯一的,建议设置unique = True
- max_length:用于限定字段可以存储的字符的最大长度。默认值为 254,这是因为这是标准电子邮件地址的最大长度。
- blank:布尔值,默认为 False。如果设置为 True,则该字段允许为空。
- null:布尔值,默认为 False。如果设置为 True,则 Django 在数据库中使用 NULL 来存储空值。
- default:字段的默认值。
- editable:布尔值,默认为 True。如果设置为 False,这个字段将不会在 Django 管理界面或者任何 ModelForm 中显示。
- help_text:用于在表单字段旁边显示额外的帮助文本。
- verbose_name:为字段设置一个人类可读的名字
IntegerField()
- IntegerField 是一个用于存储整数的字段。
- 它适用于那些需要存储整数的地方,比如年龄、数量等。
- 在数据库层面,通常对应于整数类型。
SlugField()
- SlugField 是一个用于存储“slug”的字符串字段,通常用于URLs。
- “Slug”是一个短标签,通常只包含字母、数字、下划线或连字符,用于提高URL的可读性。
- 它默认最大长度为50个字符,并且可以用max_length参数自定义。
- 通常,SlugField会有一个unique_for_date参数,用于确保在给定日期范围内slug的唯一性。
URLField()
- URLField 是一个用于存储URL的字符串字段。
- 它默认最大长度为200个字符,也可以用max_length参数自定义。
- 在数据库层面,它通常对应于一个VARCHAR字段。
BooleanField()
- BooleanField 是一个用于存储布尔值(True/False)的字段。
- 它通常用于表示“是/否”或“开/关”这样的二值状态。
- 在数据库层面,通常对应于一个布尔类型。
FileField()
FileField(upload_to=None, max_length=100) - 文件字段
-
upload_to = “/some folder/”:上传文件夹路径
-
max_length = xxxx:文件最大长度
ImageField()
ImageField (upload_to=None, max_length=100,)- 图片字段
- upload_to = “/some folder/”: 指定上传图片路径
关系字段
OneToOneField()
OneToOneField(to, on_delete=xxx, options) - 单对单关系
-
to必需指向其他模型
-
必需指定on_delete选项(删除选项): i.e, “on_delete =
-
models.CASCADE” or “on_delete = models.SET_NULL” .
-
可以设置 “related_name = xxx” 便于反向查询。
ForeignKey()
ForeignKey(to, on_delete=xxx, options) - 单对多关系
-
to必需指向其他模型.
-
必需指定on_delete选项(删除选项): i.e, “on_delete = models.CASCADE” or “on_delete = models.SET_NULL” .
-
可以设置”default = xxx” or “null = True” ;
-
如果有必要,可以设置 “limit_choices_to = “,
-
可以设置 “related_name = xxx” 便于反向查询。
ManyToManyField()
ManyToManyField(to, options) - 多对多关系
- to 必需指向其他模型,比如 User or ‘self’ .
- 设置 “symmetrical = False “ 表示多对多关系不是对称的,比如A关注B不代表B关注A
- 设置 “through = ‘intermediary model’ “ 如果需要建立中间模型来搜集更多信息。
- 可以设置 “related_name = xxx” 便于反向查询。
对于OneToOneField和ForeignKey, on_delete选项和related_name是两个非常重要的设置,前者决定了了关联外键删除方式,后者决定了模型反向查询的名字。
on_delete删除选项
Django提供了如下几种关联外键删除选项, 可以根据实际需求使用。
- CASCADE:级联删除。当你删除publisher记录时,与之关联的所有都会被删除。
- PROTECT: 保护模式。如果有外键关联,就不允许删除,删除的时候会抛出ProtectedError错误,除非先把关联了外键的记录删除掉。
- SET_NULL: 置空模式。删除的时候,外键字段会被设置为空。
- SET_DEFAULT: 置默认值,删除的时候,外键字段设置为默认值。
- SET(): 自定义一个值。
- DO_NOTHING:什么也不做。删除不报任何错,外键值依然保留,但是无法用这个外键去做查询
related_name选项
- related_name 选项用于指定从相关模型反向引用时的名称。这个选项允许你从一个关系的“另一边”引用对象,而不必直接通过模型的字段名。
from django.db import modelsclass Author(models.Model):name = models.CharField(max_length=100)class Book(models.Model):title = models.CharField(max_length=100)author = models.ForeignKey(Author, on_delete=models.CASCADE, related_name='books')
在这个例子中,Book 模型有一个指向 Author 模型的 ForeignKey。通过设置 related_name=‘books’,我们可以在 Author 实例上使用 books 属性来获取所有与之相关的 Book 实例。
重要特性
如果没有指定 related_name,Django 会自动创建一个默认的名称,格式为 <model_name>_set,其中 <model_name> 是关系的另一端的模型的小写名称(例如,如果 Book 模型有一个指向 Author 的 ForeignKey,默认的 related_name 将是 book_set)。
如果你的模型被用于多个 ForeignKey 或 ManyToManyField,为每个关系指定一个唯一的 related_name 是一个好的实践,这样可以避免命名冲突。
如果你不希望为关系创建反向名称,可以将 related_name 设置为 ‘+’ 或者 None(在 Django 1.9 及以后版本中)。
示例
class Author(models.Model):name = models.CharField(max_length=100)class Book(models.Model):title = models.CharField(max_length=100)author = models.ForeignKey(Author, on_delete=models.CASCADE, related_name='publications')class Article(models.Model):title = models.CharField(max_length=100)author = models.ForeignKey(Author, on_delete=models.CASCADE, related_name='articles')
在这个例子中,Author 可以通过 publications 属性获取其所有的 Book 实例,通过 articles 属性获取其所有的 Article 实例。
使用 related_name:
author = Author.objects.get(name="Jane Doe")
author_books = author.publications.all() # 获取所有与Jane Doe相关的书籍
author_articles = author.articles.all() # 获取所有与Jane Doe相关的文章
如果不使用 related_name:
author_books = Book.objects.filter(author=author) # 使用默认的related_name
author_articles = Article.objects.filter(author=author) # 使用默认的related_name
模型的META选项
在 Django 中,每个模型都有一个内部类叫做 Meta,它用于包含模型的元数据,即关于模型自身的配置信息。这些元数据不会直接转换为数据库字段,但它们会影响模型的行为,尤其是在数据库层面和 Django 管理界面中的表现。
以下是一些常用的 Meta 选项及其用途:
abstract
类型:布尔值
默认值:False
用途:如果设置为 True,则模型会被视为抽象基类,不会创建对应的数据库表。
app_label
类型:字符串
用途:指定模型所属的应用的名称。通常不需要设置,因为 Django 会自动确定。
db_table
类型:字符串
用途:指定模型在数据库中对应的表名。如果不设置,Django 会自动生成表名,格式为 <app_label>_<model_name>。
db_tablespace
类型:字符串
用途:指定模型使用的数据库表空间。如果数据库支持表空间,这个选项可以用来指定模型表应该使用的表空间。
get_latest_by
类型:字符串或字段名
用途:指定一个字段名,通常是日期或时间字段,以便使用 Model.objects.latest() 方法时按照该字段排序获取最新记录。
managed
类型:布尔值
默认值:True
用途:如果设置为 False,Django 不会为该模型创建或删除数据库表。这在模型映射到预先存在的数据库表或是在非数据库数据源上时很有用。
order_with_respect_to
类型:字段名
用途:用于多对多关系,允许对象根据指定的字段进行排序。
ordering
类型:字符串或字段列表
用途:指定对象默认的排序方式。例如,[‘name’] 表示按照 name 字段的升序排序。
permissions
类型:二元组列表
用途:为模型添加额外的权限。每个元组应该包含两个元素:权限代码和人类可读的权限名称。
proxy
类型:布尔值
默认值:False
用途:如果设置为 True,则模型会被视为代理模型。它将继承其父模型的字段,但不会创建新的数据库表。
unique_together
类型:字段名列表的列表
用途:指定字段组合的唯一性约束。例如,unique_together = [(‘username’, ‘email’)] 表示 username 和 email 的组合必须是唯一的。
verbose_name
类型:字符串
用途:为模型设置一个人类可读的单数名称。
verbose_name_plural
类型:字符串
用途:为模型的复数名称设置一个人类可读的名称。
以下是一个包含 Meta 类的模型示例:
from django.db import modelsclass Person(models.Model):first_name = models.CharField(max_length=50)last_name = models.CharField(max_length=50)class Meta:ordering = ['last_name']verbose_name_plural = "people"
模型的方法
在 Django 中,模型不仅仅是数据库表的简单映射;它们也是具有行为的 Python 对象。你可以为模型添加自定义的方法来执行各种操作,比如计算字段值、处理相关对象,或者执行任何其他需要的业务逻辑。
以下是一些常见类型的模型方法及其用途:
自定义管理器方法
虽然不是直接在模型上定义的,但管理器方法是模型中经常使用的方法。它们允许你对查询集进行自定义操作。
from django.db import modelsclass BookManager(models.Manager):def title_count(self, keyword):return self.filter(title__icontains=keyword).count()class Book(models.Model):title = models.CharField(max_length=100)objects = BookManager()# 使用自定义管理器方法
book_count = Book.objects.title_count('django')
自定义实例方法
这些方法通常用于处理单个模型实例。
class Author(models.Model):name = models.CharField(max_length=100)books = models.ManyToManyField(Book)# book_count 方法返回与特定作者相关的书籍数量。def book_count(self):return self.books.count()
自定义类方法
类方法与实例方法不同,因为它们不需要特定的实例来调用。它们可以用来返回查询集或者执行与特定实例无关的操作。
class Book(models.Model):title = models.CharField(max_length=100)published_date = models.DateField()#recent_books 类方法返回最近30天内发布的书籍。@classmethoddef recent_books(cls):return cls.objects.filter(published_date__gte=datetime.now() - timedelta(days=30))
自定义静态方法
静态方法不依赖于类或实例的状态。它们用于执行一些不访问任何属性或方法的操作。
class Book(models.Model):title = models.CharField(max_length=100)
#is_valid_title 静态方法检查给定的标题是否有效。@staticmethoddef is_valid_title(title):return len(title) > 0
保存和删除钩子
Django 提供了 save 和 delete 方法的钩子,你可以在这些方法中添加自定义逻辑。
class Book(models.Model):title = models.CharField(max_length=100)def save(self, *args, **kwargs):do_something_before_save()super(Book, self).save(*args, **kwargs)do_something_after_save()def delete(self, *args, **kwargs):do_something_before_delete()super(Book, self).delete(*args, **kwargs)do_something_after_delete()
以下是一个综合了上述方法的模型示例:
from django.db import models
from datetime import datetime, timedeltaclass Author(models.Model):name = models.CharField(max_length=100)def get_books(self):return self.book_set.all()class Book(models.Model):title = models.CharField(max_length=100)authors = models.ManyToManyField(Author)published_date = models.DateField()def was_published_recently(self):return self.published_date >= datetime.now() - timedelta(days=30)@classmethoddef get_recent_books(cls):return cls.objects.filter(published_date__gte=datetime.now() - timedelta(days=30))def save(self, *args, **kwargs):if not self.title:raise ValueError("Book must have a title.")super(Book, self).save(*args, **kwargs)
相关文章:
四、Django模型
Model Model (模型) 简而言之即数据模型,是一个Django应用的核心。模型不是数据本身(比如数据表里的数据), 而是抽象的描述数据的构成和逻辑关系。 每个Django的模型(model)实际上是个类,继承了models.Model。每个Model应该包括属性(字段)&…...
Telephony SS
1、补充业务概述 SS是补充服务的缩写,它包含呼叫转移、呼叫限制、呼叫等待、线路识别(CLIR)等。在IMS(IP多媒体子系统)网络中,它使用XCAP(XML配置访问协议)协议通过UT接口操纵SS数据。该协议允许授权用户在连接到IMS或连接到非IMS网络(例如公共互联网)时操纵与服务相…...
【软考】希尔排序算法分析
目录 1. c代码2. 运行截图3. 运行解析 1. c代码 #include <stdio.h> #include <stdlib.h> void shellSort(int data[], int n){// 划分的数组,例如8个数则为[4, 2, 1]int *delta;int k;// i控制delta的轮次int i;// 临时变量,换值int temp;…...
C++(一)----C++基础
1.C的发展史 C语言诞生后,很快普及使用,但是随着编程规模增大且越来越复杂,并且需要高度的抽象和建模时,C语言的诸多短板便表现了出来,为了解决软件危机,上世纪八十年代,计算机界提出了oop&…...
C 语言面试题大汇总之华为面试题
文章目录 1. 局部变量能否和全局变量重名?2. 如何引用一个已经定义过的全局变量?3. 全局变量可不可以定义在可被多个.C 文件包含的头文件中?为什么?4. 请写出下列代码的输出内容5. static 全局变量与普通的全局变量有什么区别?static 局部变量和普通局部变量有什么区别?s…...
Java:面向对象
继承 继承是一种面向对象编程(OOP)特性,它允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性(如方法和字段)。通过继承,子类可以复用父类的代…...
【区块链 + 基层治理】腾讯未来社区:区块链业主决策系统 | FISCO BCOS应用案例
腾讯未来社区是腾讯推出的智慧社区综合解决方案,致力于形成“互联网 社区”一站式解决方案,打造智慧社 区健康生态。为了解决物业管理领域的痛点,构建围绕居民、物业、政府和商业四个角色为核心的良好生态,以 信息平台及工具为纽…...
【Rust练习】13.数组
练习题来自:https://practice-zh.course.rs/compound-types/array.html 1 fn main() {// 使用合适的类型填空let arr: __ [1, 2, 3, 4, 5];// 修改以下代码,让它顺利运行assert!(arr.len() 4); }显然这个数组的长度是5. fn main() {// 使用合适的类…...
直流负载技术介绍
直流负载技术是一种用于控制和调节电力系统运行状态的重要技术。它主要通过对电力系统中的直流负载进行有效的管理和控制,以保证电力系统的稳定运行,提高电力系统的运行效率,降低电力系统的运行成本。 直流负载技术主要包括直流负载的检测、…...
FPGA低功耗设计
FPGA低功耗设计 文章目录 FPGA低功耗设计前言一、功耗类型1.1 动态功耗1.2 静态功耗1.3 浪涌功耗 二、系统级低功耗设计2.1 **多电压技术:**即工作频率、电压和功耗的关系2.2 系统时钟分配:2.3 软硬件划分2.4 p 或单元库选择 三、RTL级别低功耗设计3.1 并…...
Python Opencv: 基于颜色提取的印章分割
利用Python实现了一个图像处理功能,即批量提取图像中的印章区域;使用了颜色聚类的方法来提取颜色。 本代码也发布到了github,欢迎大家试用(如果帮助,请star一下): GitHub - AICVHub/seal_seg_o…...
Codeforces Round 970 (Div. 3)(ABCDEF)
Codeforces Round 970 (Div. 3) A:Sakurakos Exams 签到 题意:给定1,2的数量,判断是否能用加减符号使得这些1,2计算出0 void solve() {cin>>n>>m;if(n%2)cout<<"NO\n";else{if(m%20||n)cout<<"YES\n";else cout<<"…...
springboot基于ssm+Jsp的人才招聘网站系统的设计与实现 jw2cs
目录 前言详细视频演示后端技术栈具体实现截图开发核心技术:开发工具核心代码部分展示系统设计操作可行性可行性论证试验方案源码获取 前言 👇🏻 博主介绍:👇🏻 全网粉丝50W,博客专家、CSDN特邀作者、CSDN…...
高质量共建“一带一路”!苏州金龙助力非洲交通驶向共同繁荣之旅
9月6日,中非合作论坛在北京落下帷幕。此次论坛,“高质量共建‘一带一路’”成为重要议题。截止至目前,苏州金龙海格客车已向阿尔及利亚、埃塞俄比亚、南非等所有参与共建“一带一路”的非洲国家累计出口客车14000台。从产品销售,到…...
嵌入式初学-C语言-数据结构--四
栈 1. 基本概念 栈是一种逻辑结构,是特殊的线性表。特殊在: 只能在固定的一端操作 只要满足上述条件,那么这种特殊的线性表就会呈现一种“后进先出”的逻辑,这种逻辑就被称为栈。栈 在生活中到处可见,比如堆叠的盘子…...
【HarmonyOS 4】应用性能优化
1. ArkTs 高性能编程 1.1 ArkTs 高性能编程规则 1.1.1 限制一些 TypeScript 的特性,比如需要不支持属性的动态变更、变量或参数需要明确的类型声明和返回值声明等。1.1.2 禁用 ts-ignore、ts-expect-error 等屏蔽编译校验的命令。1.1.3 开启 TypeScript 的严格模式…...
MySQL——表操作
目录 一、创建表 二、查看表 2.1 查看表中某成员的数据 2.2 查看整个表中的表成员 2.3 查看创建表时的句柄 三、修改表 alter 3.1 重命名 rename 3.2 新增一列 add 3.3 更改列属性 modify 3.4 更改列名称 change 3.5 删除某列 上一篇博客介绍了库的操作,…...
阅读笔记--Guiding Attention in End-to-End Driving Models(二)
端到端驾驶的注意力学习(Attention Learning for End-to-End Driving)关键内容学习 3.1 问题设置(Problem Setup) 模仿学习(Imitation Learning, IL):介绍了模仿学习的概念,即通过…...
Linux: network: TCP: errno: EWOULDBLOCK
https://mzhan017.blog.csdn.net/article/details/108010013 这个errno的意思: 如果是send接口函数返回的错误,代表tcp socket的sending buffer满了,让应用程序等上一段时间重试send。 所以,这个产生的原因就不固定了: 可能是当前系统太忙,导致系统发包慢,buffer累积; 可…...
闲话“设计模式”
Q1、请详细介绍 软件架构设计模式(智能化),应用程序设计模式(自动化),编程语言设计模式(人性化)(后面括号中 是我 希望 其 具有的特点) 的概念,有…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...
Kafka主题运维全指南:从基础配置到故障处理
#作者:张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1:主题删除失败。常见错误2:__consumer_offsets占用太多的磁盘。 主题日常管理 …...
