Python 为什么DateField数据类型在模型方法和视图中不同?

Python 为什么DateField数据类型在模型方法和视图中不同?,python,django,views,models,datefield,Python,Django,Views,Models,Datefield,在Django,我有一些模型,比如说: class Learner(models.Model): birth_date = models.DateField(null=True, blank=True) def is_of_age(self): logging.debug(type(self.birth_date)) ..... def overview(request): learner = Learner.objects.get(.....)

在Django,我有一些模型,比如说:

class Learner(models.Model):  
    birth_date = models.DateField(null=True, blank=True)

def is_of_age(self):
    logging.debug(type(self.birth_date))
    .....
def overview(request):
    learner = Learner.objects.get(.....)
    logging.debug(type(learner.birth_date))
    .....
和视图,比如说:

class Learner(models.Model):  
    birth_date = models.DateField(null=True, blank=True)

def is_of_age(self):
    logging.debug(type(self.birth_date))
    .....
def overview(request):
    learner = Learner.objects.get(.....)
    logging.debug(type(learner.birth_date))
    .....
为什么出生日期的类型不同? 在模型的方法中,它是
,而在视图中,它的

模型字段在分配值时不会自动转换为正确的python类型-仅在保存时转换为正确的数据库类型。Django对
出生日期
的类型不作任何保证,除了一些使用描述符的特殊字段(想想
外键
等)

从数据库检索的数据以一致的方式转换为Python类型。老实说,我不知道它是否总是相同的类型,但对于相同的数据,它将是一致的。这是你能得到的唯一保证

使用
布尔字段
,这一点变得更加明显。考虑下面的简单模型:

class Learner(models.Model):
    is_of_age = models.BooleanField(blank=True)
以下内容说明了这种行为:

>>> learner = Learner(is_of_age='yes he is')
>>> learner.save()
>>> learner.is_of_age
'yes he is'
>>> Learner.objects.get(pk=learner.pk).is_of_age
True

您在哪里以及如何调用
is of_age
method?