【发布时间】: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? - 那么比较方法是
int和tuple到现在为止。如果我只能从生日中提取年份,它应该可以正常工作吗?
谢谢
编辑:
例如,我想获取自今年年初以来已满 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('lastname')这将为您提供特定年份的所有生日记录。 -
@neverwalkaloner 如果您不理解我的观点,我深表歉意,当英语不是您的母语时,某些方面可能难以解释。你的查询工作得很好!谢谢你:)