Можете ли вы выяснить, является ли экземпляр Django Model «грязным»? - PullRequest
11 голосов
/ 17 июля 2009

Мне очень нравится функция SQLAlchemy, которая позволяет вам видеть, не является ли объект грязным: был ли он изменен с момента его извлечения из базы данных или в последний раз, когда он был сохранен.

Можно ли найти эту информацию в Django ORM?

Обратите внимание, что это не то же самое, что Грязные поля в django , так как мне все равно, какими были предыдущие данные, хотя ответ С. Лотта может дать способ сделать это, но я бы хотел как способ, который не попадает в базу данных.

Я также посмотрел на django.db.transaction.is_dirty(), но это не похоже на решение.

Ответы [ 3 ]

4 голосов
/ 17 июля 2009

Решение, которое выполняет запрос к базе данных:

class DirtyMixin(object):
    @property
    def is_dirty(self):
        db_obj = self.__class__.objects.get(self.pk)
        for f in self._meta.local_fields:
            if self.__getattribute__(f.name) != db_obj.__getattribute__(f.name):
                return True
        return False

Затем вы можете добавить это как класс предка к модели. Или, если хотите, установите обезьяну-патч для класса forms.Model.

from django.db import models
models.Model.__bases__ = (DirtyMixin,) + models.Model.__bases__
2 голосов
/ 17 июля 2009

Другой способ, включающий переопределение __setattr__, обсуждается довольно подробно в этом билете Django .

1 голос
/ 14 сентября 2012

попробуйте использовать lck.django класс TimeTrackable

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...