Django - «last_modified» или «auto_now_add» для приложения (или более одной модели?) - PullRequest
1 голос
/ 10 июля 2011

Я знаю, что в Django есть функция поля last_modified (models.DateTimeField (auto_now_add = True)) ..

но, скажем, у меня есть определенное приложение, и я хочу знать, когда было последнее изменение длялюбой из его моделей (мне все равно, какая модель была изменена, я просто хочу знать, когда было последнее изменение для этого приложения ..)

действительно ли мне нужно написать поле last_modified для каждой модели(У меня их 9 на данный момент ...), а затем проверьте, какой из них самый последний?

любая помощь будет оценена :) Спасибо

Ответы [ 2 ]

1 голос
/ 10 июля 2011

Вы можете создать базовый класс, который определяет поле last_modified ...

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

, а затем наследовать от этого

class AnotherClass(YourBaseClassName):
    another_field = models.CharField(max_length=50)
0 голосов
/ 28 июля 2011

В конце я создал таблицу для констант для своего приложения (на самом деле она у меня была раньше для других целей).поэтому таблица выглядит следующим образом:

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)

Таким образом, мне не нужно менять схему БД. Нужно только добавить упомянутый код.спасибо всем

...