在django中,我想获得一个类实例的年龄(以天为单位)。我尝试从今天减去它的创建日期字段,但似乎没有正常工作。 date.today()工作正常,但DateField给了我麻烦。我查看了它的源代码和django docs online for my version,但我不知道如何操纵它来执行减法。
import datetime.date
from django.db import models
class MyItem(models.Model):
item_name = models.CharField(max_length = 30)
creation_date = models.DateField()
def age(self):
return date.today() - creation_date
my_first_item = MyItem(item_name = 'First', creation_date = '2005-11-01')
print my_first_item.age.days
非常感谢任何输入!
答案 0 :(得分:1)
您的问题是您正在尝试使用模型外部的字段实例来表示值。
models.DateField是一个类,它表示类型为" date"的数据库字段。我怀疑您正在寻求执行以下操作之一:
在1的情况下,你根本不想使用Django的模型。您需要和想要的只是python的日期和时间处理类。对于您的具体示例,您需要使用的是一对date对象,最终会得到一个timedelta对象。
要使用python标准类执行您在示例中尝试执行的操作,请参阅以下示例:
from datetime import date
birthday = date(year=2005, month=11, day=1)
today = date.today()
age = today - birthday
print age.days()
这里我们用生日值来实例化一个日期,我们得到一个今天的值的日期,减去它们得到一个timedelta,最后打印两个日期之间的天数。
在2的情况下,让我们看一个示例模型:
class Person(models.Model):
name = models.CharField(max_length=100)
birthday = models.DateField()
这里我们有一个模型,我们使用models.CharField和models.DateField来描述数据库中包含" varchar"的表。列和"日期"柱。当我们使用ORM获取此模型的实例时,Django会处理将数据库返回的任何值转换为本机数据类型。现在让我们看看一些代表一个人实例年龄的代码:
from datetime import date
from myapp.models import Person
person = Person.objects.get(id=1)
age = date.today() - person.birthday
print age.days
在这里,您可以看到我们从数据库中获取人物模型的实例,然后从今天开始减去他们的生日。我们可以在这里做到这一点,因为当我们访问" person.birthday" Django正在将数据库返回的任何值转换为python date对象。这与" date.today()"返回的日期对象的类型相同。所以" - "操作员有道理。减法运算的结果是timedelta对象。