我被遗留数据库困住了。我想修改默认查询集以便熟练使用数据库,为此我需要使用GROUP BY
. 我知道我可以做到这一点,这让我得到了我所追求的 SQL:
query = Variant.objects.all().query
query.group_by = ['name']
return QuerySet(query=query, model=Variant)
这将产生我所追求的查询集。所以我建立了一个查询集管理器来帮助我。问题是它返回了正确的值,但是当我计算它时它是错误的。
class VariantQuerySet(QuerySet):
def group_by_name(self):
self.query.group_by = ['name']
return self.filter()
class VariantManager(models.Manager):
def get_query_set(self):
return VariantQuerySet(self.model, using=self._db)
但是当我开始玩它时..
>>> Variant.objects.filter(project__name__icontains="zam")
[<Variant: RevA>, <Variant: RevA>, <Variant: RevA>, <Variant: revB>, <Variant: RevC_Fiendish>, <Variant: RevA>, <Variant: RevA_tapeout>]
>>> Variant.objects.filter(project__name__icontains="zam").count()
7
>>> Variant.objects.filter(project__name__icontains="zam").group_by_name()
[<Variant: RevA>, <Variant: revB>, <Variant: RevC_Fiendish>, <Variant: RevA_tapeout>]
到目前为止,一切都很好。7 个未分组的项目,4 个分组。
>>> Variant.objects.filter(project__name__icontains="zam").group_by_name().count()
7
那么为什么我的计数仍然停留在 7 - 它应该是 4?我认为 _result_cache 持有该值,所以我在方法中将其设置为 None 但没有运气。任何想法为什么这是错误的?