我有一个抽象django模型和一个基本模型。我希望基本模型的任何示例都有一个字段created_at或updated_at的值。然而,到目前为止,我所有的示例都没有这两个字段的值。我做错了什么?
from django.db import models
class Trackable(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
abstract = True
class Quotation(Trackable):
reference = models.CharField(null=True, max_length=80)
quotation = Quotation(id=1)
print(quotation.created_at)
>>> None
**编辑:**它适用于下面的代码(但这并不能解释为什么上面的代码不起作用):
from django.db import models
from django.utils import timezone
class AutoDateTimeField(models.DateTimeField):
def pre_save(self, model_instance, add):
return timezone.now()
class Trackable(models.Model):
created_at = models.DateField(default=timezone.now)
updated_at = AutoDateTimeField(default=timezone.now)
class Meta:
abstract = True
class Quotation(Trackable):
reference = models.CharField(null=True, max_length=80)
1条答案
按热度按时间pepwfjgg1#
这些字段的值为
None
,因为抽象模型中的这些字段仅在对象保存到数据库中时才填充。当您仅示例化模型时,它不会触及数据库,因此它们的值为None,除非您调用save()
方法。试试看: