比方说,我们有两种模式:
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中使用函数内部(对于每个指定的查询)执行这些交叉请求?
谢谢!
答案 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。