私はレガシーデータベースで立ち往生しています。dbを上手に操作するために、デフォルトのクエリセットを変更したいのですが、これを行うには、を使用する必要があります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に設定しましたが、運がありませんでした。これが間違っている理由はありますか?