Django - 应用程序的“last_modified”或“auto_now_add”(或多个模型?)

时间:2011-07-10 09:39:18

标签: django django-models last-modified

我知道Django有last_modified字段的功能(models.DateTimeField(auto_now_add = True) )..

但是,假设我有一个应用程序,我想知道它的任何模型的最后一次更改(我真的不关心哪个模型被更改,我只是想知道什么时候是最新的更改)这个应用程序..)

我真的必须为每个模型编写一个last_modified字段(目前我有9个字段......),然后检查每个模型中哪个是最新的?

任何帮助将不胜感激:) 感谢

2 个答案:

答案 0 :(得分:1)

您可以创建一个定义last_modified字段的基类...

class YourBaseClassName(models.Model):
    last_modified = models.DateTimeField(auto_now=True)

然后从

继承
class AnotherClass(YourBaseClassName):
    another_field = models.CharField(max_length=50)

答案 1 :(得分:0)

在最后,我为我的应用程序创建了一个常量表(实际上我之前使用过其他东西)。 表格看起来像这样:

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 ..只需要添加提到的代码。 谢谢所有