带有日期计算的Django过滤器问题

带有日期计算的Django过滤器问题,django,django-models,Django,Django Models,Django模型有出生年、出生月、出生日和死亡年、死亡月、死亡日字段 model.py class person(models.Model): birth_year = models.SmallIntegerField() birth_month = models.SmallIntegerField() birth_day = models.SmallIntegerField() death_year = models.SmallIntegerField() dea

Django模型有出生年、出生月、出生日和死亡年、死亡月、死亡日字段

model.py

class person(models.Model):
   birth_year = models.SmallIntegerField()
   birth_month = models.SmallIntegerField()
   birth_day = models.SmallIntegerField()
   death_year = models.SmallIntegerField()
   death_month = models.SmallIntegerField()
   death_day = models.SmallIntegerField()
我得计算一下活不到一个月的人数

views.py

return render(request, 'report.html', {'count': count})
如何在view.py中查询

我希望django专家的帮助。:)

我得计算一下活不到一个月的人数

使用:

您可以使用来进行计算,如下所示:

from datetime import timedelta
from django.db.models import F

q = Person.objects.annotate(life_span=F('death') - F('birth'))
                           .filter(life_span__lte=timedelta(days=29))
                           .count()
print(f'Number of people {q}')
在这里,我假设任何人只要活不到29天,就会活不到一个月

“月”的概念因闰年等不同而有所不同。如果需要这种精度,可以在上面添加一些过滤器和逻辑

我得计算一下活不到一个月的人数

使用:

您可以使用来进行计算,如下所示:

from datetime import timedelta
from django.db.models import F

q = Person.objects.annotate(life_span=F('death') - F('birth'))
                           .filter(life_span__lte=timedelta(days=29))
                           .count()
print(f'Number of people {q}')
在这里,我假设任何人只要活不到29天,就会活不到一个月



“月”的概念因闰年等不同而有所不同。如果您需要这种精度,您可以在上面添加更多的过滤器和逻辑。

add
count
Querys是否有一个特定的原因,您为日期组件设置了单独的字段,而不是
DateField
?感谢您的回复。是的,我必须使用当前字段。因为我必须升级django网站,它已经有了这些字段。db模式设计不正确并不意味着你无法修复它…添加
count
query是否有一个特定的原因,你有单独的字段作为日期组件,而不是
DateField
?谢谢你的回复。是的,我必须使用当前字段。因为我必须升级django网站,它已经有了这些字段。db模式设计不当并不意味着你不能修复它…谢谢你的回答。但我必须使用当前网站中现有的字段。有没有办法使用这些字段来解决这个问题?我可以制作一个过滤器来创建年、月、日的日期吗?我可以使用datetime.date函数吗?我运行了您的代码,但出现以下错误:无法将关键字“寿命”解析到字段中。选择是:……啊,你需要先注释,然后过滤。我试试看。但是有一个类型错误是这样的。get_lookup()缺少1个必需的位置参数:“lookup_name”谢谢您的回答。但我必须使用当前网站中现有的字段。有没有办法使用这些字段来解决这个问题?我可以制作一个过滤器来创建年、月、日的日期吗?我可以使用datetime.date函数吗?我运行了您的代码,但出现以下错误:无法将关键字“寿命”解析到字段中。选择是:……啊,你需要先注释,然后过滤。我试试看。但是有一个类型错误是这样的。get\u lookup()缺少1个必需的位置参数:“lookup\u name”