我有以下型号:
class ReportLayout(models.Model):
company = models.ForeignKey(Company, blank=True, null=True)
name = models.CharField(max_length=64)
...
class Meta:
ordering = ('name', )
以下的ModelManager方法:
def for_company(self, company):
names = self.filter(company=company).values_list('name', flat=True)
public_ids = self.filter(company__isnull=True).exclude(
name__in=names).values_list('id', flat=True)
return self.filter(Q(company=company)|Q(id__in=public_ids))
我们的想法是获取公司的所有ReportLayouts。这些包括:
所以,如果我有3个ReportLayouts:
id Name Company
1 A null
2 B null
3 B Company1
for_company(Company1)
应该返回ID为1和3的ReportLayouts
似乎我应该能够在一个查询中编写它,但到目前为止我最好的是3.问题源于.filter / .exclude函数对和缺少的__notin运算符。
我希望能够执行.count()
,并且我希望查询提供的顺序是我不仅仅在2个查询中执行此操作的原因。但我如何在一个方面做到这一点完全是在逃避我。