django manage

管理器(manage)是提供给 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呢?

假如对于Person.objects.get()我们想先通过memcached get数据,如果cache里面有没有,再从数据库里面查询数据那么可以定制person的manage:

class CacheBaseManager(models.Manager): 
     def get(self, *arg, **kwargs):
        id = kwargs.get("id", 0)
        uid = kwargs.get("user__id", 0) or kwargs.get("user__id__exact", 0)
        key = id and cf.generate_cache_key(id, self.model) or \
            uid and cf.generate_cache_key("uid:%s" % uid, self.model)
        model = key and cache.get(key)
        # 通过id查询先从缓存里面获取
        if not model:
            model =  super(CacheBaseManager, self).get(*arg, **kwargs)
            cache.set(key, model, 60*60)
        else:
            if dir(self.model()) != dir(model):
                model =  super(CacheBaseManager, self).get(*arg, **kwargs)
                cache.set(key, model, 60*60)
            logging.debug("cache hit >> [%s]" % key)
            
        return model
 

猜你喜欢

转载自san-yun.iteye.com/blog/1542219