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

时间:2015-06-10 07:14:38

标签: python django join django-models django-queryset

比方说,我们有两种模式:

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中使用函数内部(对于每个指定的查询)执行这些交叉请求?

谢谢!

1 个答案:

答案 0 :(得分:3)

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