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

2024-04-20 10:48:47 发布

您现在位置:Python中文网/ 问答频道 /正文

在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))
    .....

为什么birth_date的类型不同? 在model的方法中是<class 'dict'>,而在view中是<class 'datetime.date'>。你知道吗


Tags: djangodebug模型selftruedatemodelmodels
1条回答
网友
1楼 · 发布于 2024-04-20 10:48:47

模型字段在赋值时不会自动转换为正确的python类型-保存时仅转换为正确的数据库类型。Django不保证birth_date的类型,除了一些使用描述符的特殊字段(比如ForeignKey等)。你知道吗

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

这在BooleanField中变得更加明显。考虑以下简单模型:

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

相关问题 更多 >