【问题标题】:How to query from the DB by age in Django when birthday is stored as year/month/day fields当生日存储为年/月/日字段时,如何在 Django 中按年龄从数据库中查询
【发布时间】:2014-08-24 17:46:34
【问题描述】:

我有一些代码可以按年龄过滤和排序,之前假设我们正在查询的模型将存储的年龄作为单个整数进行查询。这些是我拨打的电话类型:

user_profiles = user_profiles.filter(age__gte=min_age, age__lte=max_age)
user_profiles.order_by("age")

作为重构的一部分,我将模型更改为存储出生年/月/日,而不是静态年龄。不过,我不清楚应该如何翻译查询调用来解决这个问题。如果我想查询 14-20 岁之间的用户,当你需要结合 3 个不相交的结果时,这是如何在 Django 中完成的列?

【问题讨论】:

  • 那是错误的改变。您应该使用 DateField 而不是三个单独的整数字段。

标签: python django


【解决方案1】:

由于您愿意进行重构,因此我强烈建议您将出生日期转换为单个 DateField,而不是使用三个单独的列。然后你可以这样做:

from datetime import date
from django.utils.timezone import now

def age_range(min_age, max_age):
    current = now().date()
    min_date = date(current.year - min_age, current.month, current.day)
    max_date = date(current.year - max_age, current.month, current.day)

    return user_profiles.filter(birthdate__gte=max_date,
                                birthdate__lte=min_date).order_by("birthdate")

大多数数据库(更不用说 Django)都内置了对日期和时间字段的支持,因此尽可能使用它们是有意义的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    相关资源
    最近更新 更多