【发布时间】:2011-05-23 14:39:54
【问题描述】:
我有一个带有两个自定义管理器方法的 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_set 和documentation_set 在其他型号上均指ManyToManyFields。)
有没有办法获得一个查询集,或者只是一个对象列表,这是每个管理器方法返回的查询集的交集?
【问题讨论】:
-
是什么阻止您结合每个经理的两个过滤功能?
-
你的意思是像
Model.objects.managerMethodOne().managerMethodTwo()?那似乎不起作用。也许我没有正确编写我的管理器方法? -
过滤器自己运行。
Model.objects.filter(this=that).filter(that=somethingelse)。你为什么不这样做? -
啊!是的——这两种方法都使用了某种复杂的过滤器,它们都有注释。
-
@Paul D. Waite:您能否就这些管理器如此复杂的原因提供一些指导?他们都支持
get_query_set()吗?filter是否完全隐藏在get_query_set()方法中?阻止您简单地链接过滤器的真正问题是什么?
标签: python django django-models