rukurxの日記

自分の日々の作業や調べたことのメモ

DjangoのモデルでHaving句を使う

ユーザと趣味モデルを定義して、趣味が3つ以上ある既婚者を取得する例。

from django.db import models

class Hobby(models.Model):
    """
    趣味モデル
    """
    name = models.CharField(max_length=255,  null=False, blank=False)

class User(models.Model):
    """
    ユーザモデル
    """
    name = models.CharField(max_length=255,  null=False, blank=False)
    is_married = models.BooleanField(default=False)
    hobbies = models.ManyToManyField(
        to=Hobby,
    )
# 既婚者で趣味が3つ以上あるユーザ取得
User.objects.annotate(hobby_count=Count('hobbies')).filter(is_married=True, hobby_count__gte=3)

参照

stackoverflow.com