日期计算的Django过滤器问题

时间:2019-01-07 04:55:41

标签: django django-models

Django模型具有birth_year,birth_month,birth_day和death_year,death_month,death_day字段。

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()

我必须计算生活少于1个月的人数。

views.py

return render(request, 'report.html', {'count': count})

如何在view.py中查询

希望django专家帮忙。 :)

1 个答案:

答案 0 :(得分:3)

  

我必须计算生活少于1个月的人数。

使用DateField

class Person(models.Model):
  birth = models.DateField()
  death = models.DateField()

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

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天的任何人都生活了不到一个月。

“月”的概念因leap年等而异。如果需要这种精度,则可以在上面添加更多过滤器和逻辑。