管理器是提供给 Django 应用程序的数据库查询操作的接口. Django 应用程序中的每个 model 至少有一个管理器对象.
Django 默认自动给每个 model 添加一个名为 objects 的管理器.不过如果你需要用 objects 作为一个字段名的话, 或者你不愿意使用 objects 这个名字, 也允许为 model 指定自定义名字. 若在 model 中定义一个 models.Manager() 类型的属性, 则该属性就是管理器对象:
from django.db import models class Person(models.Model): #... people = models.Manager()
在这个例子里, Person.objects.all() 会引发异常,而 Person.people.all() 会提供一个所有 Person 对象
Book.objects.all()中objetcs就是一个Manager的例子。那么什么时候需要
定制自己的manager呢: to add extra manager methods, and/or
to modify the initial QuerySet the manager returns.
1)Adding Extra Manager Methods
例子:
给Book Model添加一个可以统计指定关键字个数的方法
class BookManager(models.Manager):
def title_count(self,keyword):
return self.filter(tille__icontains=keyword).count()
class Book(models.Model):
tille = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
publication_date = models.DateField()
objects = BookManager()
def __unicode__(self):
return self.tille
2)Modifying Initial Manager QuerySets
管理器默认的QuerySet返回表中的所有记录,如果有需要可以定制返回内容。
只需要重写Manager.get_query_set()就可以了。
举例:下面的model如果用dahl管理器则在使用Book.dahl_ojbects.all()时
只会返回所有yonggao写的书。
from django.db import models
# First, define the Manager subclass.
class DahlBookManager(models.Manager):
def get_query_set(self):
return super(DahlBookManager, self).get_query_set().filter(author='yonggao')
# 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.
上面例子的注意点:
当自己定义管理器时,请总要保留models.Manager()这个默认管理器。
自定义管理器可以用来定义共通的过滤器例如下面的例子,使用不同的
Manager来管理不同的数据更容易。
class MaleManager(models.Manager):
def get_query_set(self):
return super(MaleManager, self).get_query_set().filter(sex='M')
class FemaleManager(models.Manager):
def get_query_set(self):
return super(FemaleManager, self).get_query_set().filter(sex='F')
class Person(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
sex = models.CharField(max_length=1, choices=(('M', 'Male'), ('F', 'Female')))
people = models.Manager()
men = MaleManager()
women = FemaleManager()
一个注意点:如果在model中定义了多个manager,则第一个manager是django的默认
管理器。django的很多部分会用默认manager来处理model。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sunyonggao/archive/2009/10/25/4726802.aspx
分享到:
相关推荐
主要介绍了Django中自定义模型管理器(Manager)及方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
django-cache-manager django模型的简单缓存管理器,用于缓存模型的查询集。 缓存管理器将缓存已针对模型看到的所有查询。 对于模型的任何更新/删除,都会驱逐模型缓存。 对于不经常更改的模型,此管理器很有用。 ...
基于Django的图书管理系统源码+数据库,基于Django的图书管理系统源码+数据库基于Django的图书管理系统源码+数据库基于Django的图书管理系统源码+数据库基于Django的图书管理系统源码+数据库基于Django的图书管理...
的Django 3.1.4 您可以在requirements-dev.txt中找到所有软件包 特征 生成强密码。 密码使用特殊密钥加密。 用户可以添加,修改和删除密码。 用户可以使用Google身份验证器之类的应用配置两因素身份验证。 注册...
$ pip install django-filemanager 如果你想从 GitHub 安装最新的开发版本: $ pip install -e git://github.com/byteweaver/django-filemanager#egg=django-filemanager 将filemanager添加到您的INSTALLED_APPS ...
Django Kubernetes管理器0.4.7 Django Kubernetes Manager是一个开源项目,旨在通过Django Rest Framework的简单性包装Kubernetes管理的复杂性。介绍我们的工程团队开发了多个数据处理应用程序,发现芹菜还不足以...
资源分类:Python库 所属语言:Python 资源全名:django-manager-utils-1.2.0.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
项目概述:高效Django告警组件——Django Alerter,是一款基于Python语言开发的告警系统插件,无缝对接知名监控系统AlertManager。该项目共包含20个文件,其中18个为Python源代码文件,1个版本控制忽略配置文件(....
django-manager-utils Django 模型管理器的附加实用程序。 安装 要安装最新版本,请输入: pip install django-manager-utils 要直接从源代码安装最新代码,请键入: pip install git+git://github....
基于django的alertmanager告警接口,可以实现简单的.zip
python库。 资源全名:django_botmanager-0.1.9-py3-none-any.whl
Django本身有认证系统,我这个纯粹是用于练习了。共有两个表,一个manager,一个member,manager用session认证,member用cookies认证。
django-audio-manager 一个项目,演示如何使用django上传,查看和共享音频文件。目标Django Audio Manager是一个演示项目,展示了如何使用django上传和共享django媒体文件。跑步docker-compose up , docker-compose...
主要介绍了Python的Django框架中Manager方法的使用,包括修改初始Manager QuerySets和增加额外的Manager方法等操作,需要的朋友可以参考下
Django后端,用于管理许可证和订阅。 设置许可证管理器 先决条件 设置DEVSTACK_WORKSPACE环境变量(本地或在你的shell配置文件: .bash_rc , .zshrc ,或相当),其包含此回购和正回购devstack的文件夹。例如, ...
文件管理器 Filemanager是一个简单的Django应用程序,用于浏览服务器上的文件。 您也可以将此文件管理器与CKEditor集成。要求Python(2.7、3.4、3.5、3.6、3.7) Django(1.8,1.11)截屏快速开始安装方式pip ...
资源来自pypi官网。 资源全名:django-smart-manager-1.1.0.tar.gz
python库。 资源全名:django_token_manager-1.1.0-py3-none-any.whl
Django群组管理员 ...GROUPS_MANAGER = { # ... other settings 'SLUGIFY_FUNCTION' : lambda s : slugify ( s , to_lower = True ), 'SLUGIFY_USERNAME_FUNCTION' : lambda s : slugify ( s , to_l