Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django每个模型都必须有“创建日期”和“修改日期”字段_Python_Mysql_Django - Fatal编程技术网

Python Django每个模型都必须有“创建日期”和“修改日期”字段

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

是否有办法为models.py中的每个模型创建一个
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)