前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django源码学习-5-Manager 模型自定义-下

Django源码学习-5-Manager 模型自定义-下

作者头像
小团子
发布2019-07-30 14:25:50
4250
发布2019-07-30 14:25:50
举报
文章被收录于专栏:数据云团

Django源码学习-5-Manager 模型自定义-上

Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。

Django默认会为每个Django模型类添加一个Manager ,命名为objects。使用自定义的 Manager 对象,需要注意,Django遇到的第一个Manager(以它在模型中被定义的位置为准)会有一个特殊状态。Django将会把第一个Manager 定义为默认Manager ,Django的许多部分(但是不包括admin应用)将会明确地为模型使用这个manager。结论是,应该小心地选择默认manager。因为覆盖get_query_set() 了,可能接受到一个无用的返回对像,必须避免这种情况。

Manager,QuerySet,Model是django的ORM用到的三个类。

修改初始Manager QuerySets

manager的基本QuerySet返回系统中的所有对象。例如,`` Book.objects.all()`` 返回数据库book中的所有书本。

可以通过覆盖Manager.get_query_set()方法来重写manager的基本QuerySet。get_query_set()按照自定义的要求返回一个QuerySet。

例如,下面的模型有两个manager。一个返回所有对像,另一个只返回作者是Roald Yun的书。

代码语言:javascript
复制
from django.db import models
 
# First, define the Manager subclass.
class YunBookManager(models.Manager):
  def get_query_set(self):
    return super(YunBookManager, self).get_query_set().filter(author='Roald Yun')
 
class Book(models.Model):
  title = models.CharField(max_length=100)
  author = models.CharField(max_length=50)
  # ...
  
  objects = models.Manager() # The default manager.
  yun_objects = YunBookManager() # The Dahl-specific manager.

在这个示例模型中,Book.objects.all()返回了数据库中的所有书本,而Book.yun_objects.all()只返回了一本. 注意已经明确地将objects设置成manager的实例,因为如果不这么做,那么唯一可用的manager就将是 yun_objects。

当然,由于get_query_set()返回的是一个QuerySet对象,所以可以使用filter(),exclude()和其它一切QuerySet的方法。 像这些语法都是正确的:

代码语言:javascript
复制
Book.yun_objects.all()
Book.yun_objects.filter(title='Matilda')
Book.yun_objects.count()
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据云团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档