Django抽象模型的字段返回None

6za6bjd0  于 2022-12-24  发布在  Go
关注(0)|答案(1)|浏览(163)

我有一个抽象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)
pepwfjgg

pepwfjgg1#

这些字段的值为None,因为抽象模型中的这些字段仅在对象保存到数据库中时才填充。当您仅示例化模型时,它不会触及数据库,因此它们的值为None,除非您调用save()方法。
试试看:

quotation = Quotation(id=1)
quotation.save()
print(quotation.created_at)

相关问题