django每个模型都必须有date\u created和date\u modified字段

lokaqttq  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(238)

有什么方法可以让你 date_created 以及 date_modified models.py中每个模型的字段?
我想为每个正在创建的表设置这两个字段,这样我就可以知道何时创建或更新一行。
但我不想让它们在我的models.py中显示出来。
有办法吗?

svdrlsy4

svdrlsy41#

例如,你可以定义一个抽象的超模。比如:

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 是相当重要的(它仍然可以在不使其抽象的情况下工作,但是它会使数据库非常混乱和效率降低)。通过指定this is abstract,它将向从该模型继承的每个模型添加这两列。如果不将其抽象化,django将构造一个新表,但通常这会降低查询的效率。
因为您在这里向(可能是大量的)模型添加列,所以这将需要迁移,以便将列添加到数据库级别。如果应用程序中已经存储了数据,则需要找到一种方法来解析已经存在的行的列(例如,将其设置为 NOW() ,或到时代的开始)。

相关问题