有没有办法让 models.py 中的每个模型都有一个 date_created
和 date_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=True
和auto_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/