如何计算 JOINed 模型中的用户数?

How to count users in JOINed models?

比方说,我们有两个模型:

class User(models.Model):
    nickname = models.CharField(max_length=50)
    email = models.CharField(max_length=50)

class Profile(models.Model):
    user = models.OneToOneField(User, primary_key=True)
    carma = models.BooleanField(default=False)
    birthdate = models.DateField(input_formats=['%Y-%m-%d'])

如何获取用户数量:

1) 所有年龄在 18 岁以下的用户?

2) 18 - 25 岁之间的所有用户

3) 25 岁以上的所有用户

据我了解,我需要从出生日期获取年龄,例如这样:

 def age(self):
        import datetime
        return int((datetime.date.today() - self.birthday).days / 365.25  )

并以某种方式在查询中使用返回的年龄。

如何在 Django 中使用内部函数(针对每个指定的查询)执行这些交叉请求?

谢谢!

from datetime import date

def add_years(d, years):
    try:
        return d.replace(year = d.year + years)
    except ValueError:
        return d + (date(d.year + years, 1, 1) - date(d.year, 1, 1))

today = datetime.date.today()
ago18 = add_years(today, -18)
ago25 = add_years(today, -25)

# < 18
User.objects.filter(profile__birthdate__gt=ago18)
# 18 <= and < 25
User.objects.filter(profile__birthdate__lte=ago18, profile__birthdate__gt=ago25)
# 25 <=
User.objects.filter(profile__birthdate__lte=ago25)

基于此answer