1

私は2つのモデルを持っています:

class PromoCodeGroup(models.Model):
    updated_at = models.DateTimeField(auto_now=True, verbose_name=__("Last updated at"))
    updated_by = models.ForeignKey(User, blank=True, null=True, verbose_name=__("Last created by"))
    bonus = models.IntegerField()
    affilate = models.ForeignKey(Affilate)

class PromoCode(models.Model):
    code = models.CharField(verbose_name=__("Promo code"), unique=True, max_length=100)
    promo_code_group = models.ForeignKey(PromoCodeGroup, null=False)
    is_used = models.BooleanField(default=False)

そして、PromoCodeGroup で 1 つのクエリを実行し、PromoCodes を 2 つの条件 (all、および is_used=True) で数えたいと考えています。だから私はサブクエリを作成するために .extra でこれを行います:

PromoCodeGroup.objects.annotate(codes_count=Count('promocode')) \
        .extra(select={'used_codes_count': "SELECT COUNT(*) as used_codes\
    FROM `promocodes_promocode` as pc2 \
            WHERE `is_used` = 1\
    AND pc2.promo_code_group_id=`promocodes_promocodegroup`.`id`"})

理論的には非常にスムーズに動作するはずですが、クエリを実行すると遅くなり、失敗します。注釈を付けずにコードを実行すると、実行速度が速くなります。おそらく、クエリの最後の group by が原因です。

私の質問は、Django ORM でカウントを使用して、GROUP BY クエリを防ぐ方法です。

4

1 に答える 1

0

注釈を.extraに置き換えることを解決しました。

于 2013-07-06T17:13:23.263 に答える