【问题标题】:Compare datetime with Django birthday objects将日期时间与 Django 生日对象进行比较
【发布时间】:2017-07-02 14:37:12
【问题描述】:

我对我的脚本有疑问。我想知道所有在我的数据库中拥有超过 16 年的人。我想在用户触发该功能时检查这一点。

我有这个功能:

def Recensement_array(request) :

    date = datetime.now().year
    print date # I get year from now

    birthday = Identity.objects.values_list('birthday', flat=True) # Return list with all birthday values

    for element in birthday :
        if date - element < 117 : 
            print "ok < 117"

        else : 
            print "ok > 117"

来自print date 我得到:

2017

来自print birthday 我得到:

<QuerySet [datetime.date(1991, 12, 23), datetime.date(1900, 9, 12), datetime.date(1900, 9, 12), datetime.date(1900, 9, 12), datetime.date(1900, 9, 12), datetime.date(1089, 9, 22), datetime.date(1900, 9, 12), datetime.date(1900, 9, 12), datetime.date(1089, 9, 22), datetime.date(1089, 9, 22), datetime.date(1089, 9, 22), datetime.date(1089, 9, 22), datetime.date(1990, 12, 12)]>

所以我的目标是用生日减去日期并比较date - birthday = 16 years,我打印元素,否则什么都没有。

我遇到了两个问题:

  • 如何仅从birthday 中提取year
  • 那么比较方法是inttuple到现在为止。如果我只能从生日中提取年份,它应该可以正常工作吗?

谢谢

编辑:

例如,我想获取自今年年初以来已满 16 岁或将在第一年之前满 16 岁的所有人:

def Recensement_array(request) :

    today = datetime.now()
    age_16 = (today - relativedelta(years=16))

    result = Identity.objects.filter(birthday__range=[age_16, today]).order_by('lastname')

    paginator = Paginator(result, 3)
    page = request.GET.get('page', 1)

    try:
        result = paginator.page(page)
    except PageNotAnInteger:
        result = paginator.page(1)
    except EmptyPage:
        result = paginator.page(paginator.num_pages)

    context = {
    "Identity":Identity,
    "age_16":age_16,
    "datetime" : datetime,
    "result" : result,
    "PageNotAnInteger":PageNotAnInteger,
    }


    return render(request, 'Recensement_resume.html', context)

【问题讨论】:

  • @Sayse 它不能解决我的问题,或者我不明白你的链接和我的问题之间的关系
  • 您实际上并不想只比较年份,因为那大多是不准确的(想想一个生日在 12 月的人,您会报告他比他实际年龄大一岁) .您想比较日期,并从比较中获取年份。
  • @Valentin 哦,我现在明白了。然后尝试使用__year:result = Identity.objects.filter(birthday__year=age_16.year).order_by('last‌​name') 这将为您提供特定年份的所有生日记录。
  • @neverwalkaloner 如果您不理解我的观点,我深表歉意,当英语不是您的母语时,某些方面可能难以解释。你的查询工作得很好!谢谢你:)

标签: python django datetime


【解决方案1】:

如果您需要过滤特定年份的记录,您可以使用日期字段的__year 方法:

age_16 = (today - relativedelta(years=16))
result = Identity.objects.filter(birthday__year=age_16.year).order_by‌​('last‌​name')

【讨论】:

  • 正如我之前所说,它运作良好。我可以得到一份 2017 年 16 岁的人名单。已经 16 岁的人和 2017 年 12 月 31 日之前将达到 16 岁的人
猜你喜欢
  • 2014-02-12
  • 2014-05-03
  • 1970-01-01
  • 2021-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-28
  • 2016-07-24
相关资源
最近更新 更多