我有一个带有两个自定义管理器方法的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
都引用其他模型上的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() ) )
关于python - 如何找到两个Django查询集的交集?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4411213/