停止编写django querysets。
dj-queryset-manager的Python项目详细描述
一个django实用程序,它使编写干式queryset方法变得简单。
用法
- 创建继承QuerySetManager 的管理器类
- 用queryset_method装饰过滤方法。这些方法接收一个queryset而不是一个manager作为第一个参数。
fromdj_queryset_managerimportQuerySetManager,queryset_methodclassMyManager(QuerySetManager):@queryset_methoddefby_slug(queryset,slug):returnqueryset.filter(slug=slug)@queryset_methoddeffilter(queryset,*args,**kwargs):returnsuper(type(queryset),queryset).filter(*args,**kwargs)
作为参考,这里有一个标准实现:
fromdjango.db.modelsimportManagerfromdjango.db.models.queryimportQuerySetclassMyQuerySet(QuerySet):defby_slug(self,slug):returnself.filter(slug=slug)deffilter(self,*args,**kwargs):returnsuper(MyQuerySet,self).filter(*args,**kwargs)classMyManager(Manager):defget_query_set(self):# Better remember the arguments to QuerySetQuerySet(self.model,using=self._db)defget_queryset(self):# And don't forget about Django 1.6returnself.get_query_set()defby_slug(self,*args,**kwargs):# Enjoy this duplicate signaturereturnself.get_queryset().filter(*args,**kwargs)
混入
一些第三方应用程序将管理器作为其api的一部分提供。如果需要扩展任何现有的管理器,请使用^ {TT4} $。本例使用django-model-utils中的InheritanceManager。
frommodel_utils.managersimportInheritanceManagerfromdj_queryset_managerimportQuerySetManagerMixin,queryset_methodclassMyInheritanceManager(QuerySetManagerMixin,InheritanceManager):@queryset_methoddefby_slug(queryset,slug):returnqueryset.filter(slug=slug)
安装
$ pip install dj-queryset-manager