我有一个带有两个自定义管理器方法的Django模型.每个都根据对象的不同属性返回模型对象的不同子集.

class FeatureManager(models.Manager):

    def without_test_cases(self):
        return self.get_query_set().annotate(num_test_cases=models.Count('testcase_set')).filter(num_test_cases=0)

    def standardised(self):
        return self.get_query_set().annotate(standardised=Count('documentation_set__standard')).filter(standardised__gt=0)

(testcase_setdocumentation_set都是指其他型号上的ManyToManyField.)

有没有办法获得一个查询集,或者只是一个对象列表,它是每个管理器方法返回的查询集的交集?

推荐答案

重构

class FeatureManager(models.Manager):

    @staticmethod
    def _test_cases_eq_0( qs ):
       return qs.annotate( num_test_cases=models.Count('testcase_set') ).filter(num_test_cases=0)

    @staticmethod
    def _standardized_gt_0( qs ):
        return qs.annotate( standardised=Count('documentation_set__standard') ).filter(standardised__gt=0)

    def without_test_cases(self):
        return self._test_cases_eq_0( self.get_query_set() )

    def standardised(self):
        return self._standardized_gt_0( self.get_query_set() )

    def intersection( self ):
        return self._test_cases_eq_0( self._standardized_gt_0( self.get_query_set() ) )

Django相关问答推荐

如何在Django上创建ManyToMany管理面板?

Django测试:如何模拟Django_apps.get_Model()的LookupError

Django OneToOneFieldto抽象对象

Django:添加第二个';详细';用于检索额外信息的视图

Django 中模型将数据存储在哪里?

来自日历的 Django 动态 url

root urls.py 是 Django 中的 config/urls.py 吗?

在 django 中使用自定义 url 转换器传递 url 参数

在 Django 模板中呈现标签名称而不是整数字段

带有代码完成功能的 python / django 的 Sublime Text 2 和 3 设置

恢复 Django 1.7 RemoveField 迁移

如何在 forms.Form 子类上动态设置 models.ModelChoiceField 的查询集

django.request 记录器没有传播到根目录?

Django 登录到控制台

使用 Gunicorn 运行 Django - 最佳实践

对 django 的 Http Delete 请求返回 301

使用直通模型了解 Django 中的多对多字段

Django Admin:如何在内联中显示模型上定义的属性?

Django:验证上传文件的文件类型

Django - 指定 Django 管理员应该使用哪个模型管理器