代码之家  ›  专栏  ›  技术社区  ›  Sreekanth Reddy Balne

django每个模型都必须有一个date_created和date_modified字段

  •  1
  • Sreekanth Reddy Balne  · 技术社区  · 7 年前

    有没有办法 date_created date_modified models.py中每个模型的字段?

    我希望为每个表创建这两个字段,以便能够知道何时创建或更新行。

    但我不想让它们在models.py中显示,特别是针对每个模型。

    有办法吗?

    1 回复  |  直到 7 年前
        1
  •  3
  •   willeM_ Van Onsem    7 年前

    例如,您可以定义 摘要 超模。比如:

    class AppModel(models.Model):
        date_created = models.DateTimeField(auto_now_add=True)
        date_modified = models.DateTimeField(auto_now=True)
    
        class Meta:
            abstract = True

    我们用这个 auto_now_add=True auto_now ,这些参数甚至可以确保 date_created 在创建对象时自动设置为时间戳,并且 date_modified 将在更新数据库中的对象时自动更新。

    那你就可以把它分类。例如,对于名为 SomeModel 以下内容:

    class SomeModel(AppModel):
        name = models.CharField(max_length=128)

    制作模型 abstract = True 是相当重要的(好吧,它仍然可以工作而不使其抽象,但它将使数据库相当混乱和效率较低)。通过指定这是抽象的,它将把两列添加到 每一个 从该模型继承的模型。如果不将其抽象化,django将构造一个新表,但这通常会降低查询的效率。

    由于您在这里向(可能是大量的)模型添加列,这将需要一个将列添加到数据库级别的迁移。如果在应用程序中已经存储了数据,则需要找到一种方法来解决已经存在的行的列(例如将其设置为 NOW() ,或者直到时代的开始)。