有什么方法可以让你 date_created 以及 date_modified models.py中每个模型的字段?我想为每个正在创建的表设置这两个字段,这样我就可以知道何时创建或更新一行。但我不想让它们在我的models.py中显示出来。有办法吗?
date_created
date_modified
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 :
auto_now_add=True
auto_now
SomeModel
class SomeModel(AppModel): name = models.CharField(max_length=128)
制作模型 abstract = True 是相当重要的(它仍然可以在不使其抽象的情况下工作,但是它会使数据库非常混乱和效率降低)。通过指定this is abstract,它将向从该模型继承的每个模型添加这两列。如果不将其抽象化,django将构造一个新表,但通常这会降低查询的效率。因为您在这里向(可能是大量的)模型添加列,所以这将需要迁移,以便将列添加到数据库级别。如果应用程序中已经存储了数据,则需要找到一种方法来解析已经存在的行的列(例如,将其设置为 NOW() ,或到时代的开始)。
abstract = True
NOW()
1条答案
按热度按时间svdrlsy41#
例如,你可以定义一个抽象的超模。比如:
我们用这个
auto_now_add=True
以及auto_now
,这些参数甚至可以确保date_created
自动设置为创建对象时的时间戳,并且date_modified
将在更新数据库中的对象时自动更新。然后你可以给它分类。例如,对于一个名为
SomeModel
:制作模型
abstract = True
是相当重要的(它仍然可以在不使其抽象的情况下工作,但是它会使数据库非常混乱和效率降低)。通过指定this is abstract,它将向从该模型继承的每个模型添加这两列。如果不将其抽象化,django将构造一个新表,但通常这会降低查询的效率。因为您在这里向(可能是大量的)模型添加列,所以这将需要迁移,以便将列添加到数据库级别。如果应用程序中已经存储了数据,则需要找到一种方法来解析已经存在的行的列(例如,将其设置为
NOW()
,或到时代的开始)。