python - Django 每个模型都必须有一个 date_created 和 date_modified 字段

标签 python mysql django

有没有办法让 models.py 中的每个模型都有一个 date_createddate_modified 字段?

我想为每个正在创建的表创建这两个字段,以便我能够知道何时创建或更新了一行。

但我不想在我的 models.py 中专门为每个模型显示它们。

有办法吗?

最佳答案

例如,您可以定义一个抽象 super 模型。喜欢:

class <b>AppModel</b>(models.Model):
    <b>date_created</b> = models.DateTimeField(auto_now_add=True)
    <b>date_modified</b> = models.DateTimeField(auto_now=True)

    class Meta:
        <b>abstract = True</b>

这里我们使用auto_now_add=Trueauto_now,这些参数甚至会确保date_created自动设置为对象创建时的时间戳已创建,date_modified 将在您更新数据库中的对象时自动更新。

然后你可以继承它。例如,对于名为 SomeModel 的模型:

class SomeModel<b>(AppModel)</b>:
    name = models.CharField(max_length=128)

使模型 abstract = True 相当重要(它仍然可以在不抽象的情况下工作,但它会使数据库非常困惑且效率低下)。通过指定这是抽象的,它会将两列添加到继承自该模型的每个模型。如果您不将其抽象化,Django 将构造一个新表,但通常这会降低查询效率。

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

关于python - Django 每个模型都必须有一个 date_created 和 date_modified 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51231534/

相关文章:

mysql - 在发布到 MySQL 之前合并两个字段

django - 绑定(bind)到 Django Admin 的模型历史

用于管理 dns 和 dhcp 的 Python 模块

python - PySpark 将字典的字符串化数组分解成行

python - 为什么我的 implemented_function() 导致 NameError : global name 'Derivative' is not defined?

mysql - 为什么 MySQL 不将这些列相加?

python - 如何阻止 Django 转义 # 符号

python - NumPy:有限的累积总和

python - 将列表写入文本文件

mysql - Rails Active Record,从 has_many :through relationship with where clause on through record 获取相关记录