我知道 Django 具有 last_modified 字段的功能(models.DateTimeField(auto_now_add=True) )..
但是假设我有一个应用程序,我想知道它的任何模型的最后一次更改是什么时候(我真的不在乎哪个模型被更改了,我只想知道这个应用程序的最新更改是什么时候。 .)
我真的必须为每个模型写一个 last_modified 字段(我目前有 9 个......),然后检查每个模型是最新的吗?
任何帮助将不胜感激:) 谢谢
我知道 Django 具有 last_modified 字段的功能(models.DateTimeField(auto_now_add=True) )..
但是假设我有一个应用程序,我想知道它的任何模型的最后一次更改是什么时候(我真的不在乎哪个模型被更改了,我只想知道这个应用程序的最新更改是什么时候。 .)
我真的必须为每个模型写一个 last_modified 字段(我目前有 9 个......),然后检查每个模型是最新的吗?
任何帮助将不胜感激:) 谢谢
您可以创建一个定义 last_modified 字段的基类...
class YourBaseClassName(models.Model):
last_modified = models.DateTimeField(auto_now=True)
然后从中继承
class AnotherClass(YourBaseClassName):
another_field = models.CharField(max_length=50)
最后,我为我的应用程序制作了一个常量表(实际上我之前有它用于其他用途)。所以表格看起来像这样:
from django.db import models
from django.db.models.signals import post_save
class Constant(models.Model):
name = models.CharField(max_length=50)
value = models.CharField(max_length=50)
并添加了一个名为“version_date”的常量。
然后,我将此代码添加到我的 models.py 的底部,以跟踪应用程序中所有模型的所有更改。
myapp = models.get_app('myapp')
models2track = models.get_models(myapp)
def update_version(sender, **kwargs):
for model in models2track:
post_save.disconnect(update_version, sender=model, dispatch_uid="some_uid"+model._meta.db_table)
version_date = Constant.objects.get_or_create(id=1,name="version date")[0]
version_date.value = str(int(time.time()))
version_date.save()
for model in models2track:
post_save.connect(update_version, sender=model, dispatch_uid="some_uid"+model._meta.db_table)
for model in models2track:
post_save.connect(update_version, sender=model, dispatch_uid="some_uid"+model._meta.db_table)
这样,我不需要更改我的 DB Schema.. 只需要添加提到的代码。谢谢大家