使用自定义的 Manager

class CategoryManager(models.Manager):
    """
    A manager that adds an "active()" method for all active categories
    """
    def active(self):
        """
        Only categories that are active
        """
        return self.get_query_set().filter(active=True)

class CategoryBase(MPTTModel):
    """
    This base model includes the absolute bare bones fields and methods. One
    could simply subclass this model and do nothing else and it should work.
    """
    parent = TreeForeignKey(‘self‘,
        blank=True,
        null=True,
        related_name=‘children‘,
        verbose_name=_(‘parent‘))
    name = models.CharField(max_length=100, verbose_name=_(‘name‘))
    slug = models.SlugField(verbose_name=_(‘slug‘))
    active = models.BooleanField(default=True, verbose_name=_(‘active‘))

    objects = CategoryManager()
    tree = TreeManager()

    def save(self, *args, **kwargs):
        """
        While you can activate an item without activating its descendants,
        It doesn‘t make sense that you can deactivate an item and have its
        decendants remain active.
        """
        if not self.slug:
            self.slug = slugify(SLUG_TRANSLITERATOR(self.name))[:50]

        super(CategoryBase, self).save(*args, **kwargs)

        if not self.active:
            for item in self.get_descendants():
                if item.active != self.active:
                    item.active = self.active
                    item.save()

    def __unicode__(self):
        ancestors = self.get_ancestors()
        return ‘ > ‘.join([force_unicode(i.name) for i in ancestors] + [self.name, ])

    class Meta:
        abstract = True
        unique_together = (‘parent‘, ‘name‘)
        ordering = (‘tree_id‘, ‘lft‘)

    class MPTTMeta:
        order_insertion_by = ‘name‘

http://www.oschina.net/translate/higher-level-query-api-django-orm



http://www.nanerbang.com/article/34/

这里的貌似也不错

from django.db import models

class PublicArticleManager(models.Manager):
    def get_query_set(self):
        return super(PublicArticleManager, self).get_query_set().filter(public = True)

class Article(models.Model):
    #...
    public =  models.BooleanField(‘是否发表‘, default = False)

    objects = models.Manager()
    public_articles = PublicArticleManager()

http://hunterford.me/django-custom-model-manager-chaining/

https://godjango.com/browse/

时间: 2024-12-21 15:50:19

使用自定义的 Manager的相关文章

使用Configuration Manager配置资产智能

一. 配置资产智能概述及其相关术语 System Center 2012 Configuration Manager中,通过资产智能并管理软件,可以通过使用智能资产目录许可整个企业的使用情况.许多硬件库存 Windows 管理规范 (WMI) 类提高收集有关正在使用的硬件和软件的标题信息的广度.超过 60 个报表以易于使用的格式显示此信息.其中许多报表链接到更具体的报告,可以在此查询的一般信息,并深入查看更详细的信息.您可以自定义信息资产智能目录,如自定义软件类别.软件系列. 软件标签和硬件要求

Weak Event Manager

问题 通过传统的方式监听事件(即C#的+=语法),有可能会导致内存泄漏,原因是事件源会持有对事件Handler所在对象的强引用从而阻碍GC回收它,这样事件handler对象的生命周期受到了事件源对象的影响. 解决方案 此问题有两个解决办法:1) 确保通过-=语法反注册事件处理器 2)使用弱事件模式(Weak Event Pattern).本文主要讲解Weak Event Pattern. 在使用Weak Event Pattern时,主要涉及到两个类:WeakEventManager和IWeak

django manager

django manager 在语句Book.objects.all()中,objects是一个特殊的属性,需要通过它查询数据库. 总之,模块manager是一个对象,Django模块通过它进行数据库查询. 每个Django模块至少有一个manager,你可以创建自定义manager以定制数据库访问. 创建自定义manager: 1)增加额外的manager方法 2)修manager返回的初始QuerySet. 1) 增加额外的Manager方法 增加额外的manager方法是为模块添加表级功能

python 中变量的命名方法

从网上找到django中python的命名规范 Python  规范 代码的布局  编码 所有的Python脚本文件都应在文件头标上“# -*- coding:utf-8 -*-”.  缩进 4个空格一个缩进层次 空行 适当的空行有利于增加代码的可读性,加空行可以参考如下几个准则: (1) 在类.函数的定义间加空行: (2) 在import不同种类的模块间加工行: (3) 在函数中的逻辑段落间加空行,即把相关的代码紧凑写在一起,作为一个逻辑段落,段落间以空行分隔 换行        语句比较长,

Django model与数据库操作对应关系(转)

? Django对数据库的操作分用到三个类:Manager.QuerySet.Model. Manager的主要功能定义表级方法(表级方法就是影响一条或多条记录的方法),我们可以以models.Manager为父类,定义自己的manager,增加表级方法: QuerySet是Manager的方法返回的,是一个可遍历结构,包含一个或多个元素,每个元素都是一个Model 实例,它里面的方法也是表级方法. Model是一条记录的类,它的功能很强大,里面包含外键实体等,它的方法都是记录级方法(都是实例方

多进程

python3.6 多进程 Table of Contents 1. 多进程 1.1. linux/unix/win 启动方式对比 1.1.1. spawn win的默认方法,支持unix/win 1.1.2. fork unix的默认方法,仅支持unix 1.1.3. forkserver 当平台支持unix的管道文件时该方法可用 1.1.4. 启动子进程 1.1.5. 选择启动的方法 1.1.6. 其他内容 1.2. 进程通信 1.2.1. 队列 Queue 1.2.2. TODO 管道 P

我的Android 4 学习系列之使用 Internet 资源

目录 连接Internet资源 分析XML资源 使用Download Manager下载文件 查询Download manager 使用Account Manager 对 Google App Engine 进行身份认证 连接Internet资源 在访问internet之前,需要在应用程序清单中添加一个INTERNET uses-permission节点: <uses-permission android:name=”android.permission.INTERNET” /> String

使用Redis存储Nginx+Tomcat负载均衡集群的Session

环境:Cent OS 7.0(虚拟机环境).Nginx 1.9.8.Redis 3.2.1 一.背景 在使用Nginx+Tomcat实现负载均衡的时候,由于Nginx对不同的请求分发到某一个Tomcat,Tomcat在运行的时候分别是不同的容器里,因为会出现session不同步或者丢失的问题. 二.Nginx安装与配置 1.Nginx安装 网上的资源对于安装Nginx的介绍比较多,例如最简单的为: (1) 获取nginx,在http://nginx.org/download/上可以获取当前最新的

Django框架学习-Model进阶用法

Model进阶用法 回顾 访问外键 访问多对多关系 更改数据库结构 当处理数据库结构改变时,需要注意到几点: 增加字段 首先在开发环境中: 再到产品环境中: 删除字段 删除多对多字段 删除model Manager管理器 给管理器添加新的方法 修改返回的QuerySet Model的方法 执行自定义SQL语句 Model进阶用法 回顾 Django中的model层主要和数据库进行交互,使用数据库API对数据库进行增删改查的操作. 下面将介绍关于model层更深入的用法. 下面是之前创建model