## Model Manager
模型之间关系控制的核心一环,默认情况下所有模型都有一个叫objects的管理器,但是你可以自己继承models.Manager然后添加或者覆盖方法
~~~py
class 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)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
publication_date = models.DateField()
num_pages = models.IntegerField(blank=True, null=True)
objects = BookManager()
def __str__(self):
return self.title Here are some notes about the code:
~~~
上面这样相当于给默认的objects添加了一个叫title_count的方法
当然我们也可以添加一个新的Manager给模型
<br>
~~~py
# First, define the Manager subclass.
class DahlBookManager(models.Manager):
def get_queryset(self):
return super(DahlBookManager, self).get_queryset().filter(author='Roald Dahl')
# Then hook it into the Book model explicitly.
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=50)
# ...
objects = models.Manager() # The default manager.
dahl_objects = DahlBookManager() # The Dahl-specific manager.
~~~
上面这种做法使得Book拥有了两个Manager,DahlBookManager覆盖了父类的get_queryset方法,同时需要注意的是如果有自定义的Manager赋值,则默认的Manager也必须显式赋值才行
常用的Manager类供子类覆盖的方法有
~~~py
get_queryset: 此方法可以用来添加额外的限制条件使得自定义的manager在任何数据库查询时自动加入这个方法中已经添加的
筛选条件
~~~
****
### 多数据库情境下的操作
django的orm是可以在一个项目中操作多个数据库的,这里不讲具体的配置问题,只讲如何在使用orm语句时进行多个数据库的操作
~~~py
# 查询
YourModel.objects.using('db1').all()
或者 YourModel.objects.using('db2').all()
# 保存 或 删除
user_obj.save(using='new_users')
user_obj.delete(using='legacy_users')
~~~
奏是这么简单,查询时使用using函数,增删改时使用using参数来指定数据库名称就行了
参考文章:
1. [自强学堂:django多数据库联用](https://code.ziqiangxuetang.com/django/django-multi-database.html)
- Django基础
- 模型
- 外键
- Model Manager
- 过滤器函数
- 查询对象
- 字段的细节
- QuerySet的应用
- 视图
- Django类视图
- 权限控制
- Django进阶
- 中间件
- _meta组件
- 信号
- User模块
- prefetch_related和select_related的区别
- 较少被用到的查询对象
- Django的深层设计理念
- Declarative Syntax
- django的migration操作
- 较少用到的Queryset方法的一些坑
- Django配置
- Django环境配置变量
- Django源码阅读
- ORM
- QuerySet源码
- Query源码
- Q&F
- Model和Manager的详解
- Http请求响应
- HttpRequest
- 自建数据结构
- Django开发辅助工具
- Django-rest-framework
- Serializer
- 异步任务调度器Celery
- 数据库补充
- 定义
- 字段
- 事务
- 视图
- 函数
- 联结
- 窗口函数
- GROUPING运算符
- HAVING谓词
- django_bulk_update
- django_bulk_update源码分析
- 项目小功能开发
- Django的一些小细节