Python Django每个模型都必须有“创建日期”和“修改日期”字段
是否有办法为models.py中的每个模型创建一个Python Django每个模型都必须有“创建日期”和“修改日期”字段,python,mysql,django,Python,Mysql,Django,是否有办法为models.py中的每个模型创建一个date_和date_修改字段 我希望为每个正在创建的表提供这两个字段,以便能够知道何时创建或更新行 但我不想在我的models.py中专门针对每个模型显示它们 有办法做到这一点吗?例如,你可以定义一个抽象的超级模特。比如: class AppModel(models.Model): date_created = models.DateTimeField(auto_now_add=True) date_modified = mod
date_
和date_修改
字段
我希望为每个正在创建的表提供这两个字段,以便能够知道何时创建或更新行
但我不想在我的models.py中专门针对每个模型显示它们
有办法做到这一点吗?例如,你可以定义一个抽象的超级模特。比如:
class AppModel(models.Model):
date_created = models.DateTimeField(auto_now_add=True)
date_modified = models.DateTimeField(auto_now=True)
class Meta:
abstract = True
使模型abstract=True
相当重要(它仍然可以在不使其抽象的情况下工作,但会使数据库变得非常混乱和效率低下)。通过指定这是抽象的,它将向从该模型继承的每个模型添加两列。如果不将其抽象化,Django将构造一个新表,但通常这会降低查询的效率
由于您在此处向(可能有大量)模型添加列,因此需要进行迁移,以便将列添加到数据库级别。如果应用程序中已经存储了数据,您需要找到一种方法来解析已经存在的行的列(例如将其设置为
NOW()
,或设置为时间的开始)。使用超类怎么样?@WillemVanOnsem谢谢。我是新手。是 啊我得到了它。再次感谢。制作一个抽象类模型(包含这两个字段)。其他模型应该继承这个抽象模型。我还有一个自定义用户模型User(AbstractUser)
。我如何从这里的抽象模型继承?@whitehathackersree:是的,Python支持多重继承,因此您可以编写User(AppModel,AbstractUser)
。假设这里的AbstractUser
也包含相同的字段名。那么,如果这些字段数据类型与AppModel
相同,会发生什么情况?如果这些数据类型不同但名称相同,会发生什么情况?@whitehathackersree:在Python中,顺序由MRO决定。这里的MRO是User->AppModel->AbstractUser->…
,因此MRO中的第一个计算(因此这里它将AppModel
的字段作为“真实”列,并忽略AbstractUser
中的字段,以防冲突。如果您也能帮助我,我将不胜感激:
class SomeModel(AppModel):
name = models.CharField(max_length=128)