3

Djangoにはlast_modifiedフィールドの機能があることを知っています(models.DateTimeField(auto_now_add = True))。

ただし、特定のアプリがあり、そのモデルの最後の変更がいつであったかを知りたいとします(どのモデルが変更されたかは気にせず、このアプリの最新の変更がいつであったかを知りたいだけです。 。)

モデルごとにlast_modifiedフィールドを実際に作成する必要がありますか(現時点では9つあります...)、次に、最新の各フィールドを確認しますか?

どんな助けでもありがたいです:)ありがとう

4

2 に答える 2

2

last_modifiedフィールドを定義する基本クラスを作成できます...

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

そしてそれから継承します

class AnotherClass(YourBaseClassName):
    another_field = models.CharField(max_length=50)
于 2011-07-10T14:02:30.690 に答える
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スキーマを変更する必要はありません。上記のコードを追加するだけで済みます。皆さんありがとう

于 2011-07-28T12:43:23.867 に答える