Грязные поля в django

Я использую это:

document.addEventListener("DOMContentLoaded", function(event) { 
    //Do work
});

Примечание: это, вероятно, работает только с более новыми браузерами, особенно это: http://caniuse.com/#feat=domcontentloaded

30
задан Dmitry Shevchenko 21 September 2008 в 16:23
поделиться

2 ответа

для всеобщего сведения, решение muhuk не работает под python2.6, поскольку оно вызывает исключение, в котором говорится, что «объект .__ init __ ()» не принимает аргументов ...

edit: ho! очевидно, это могло быть неправильное использование мной миксина ... Я не обратил внимания и объявил его последним родителем, и из-за этого вызов init закончился в родительском объекте, а не в следующем родителе как это обычно бывает с наследованием ромбовидной диаграммы! так что не обращайте внимания на мой комментарий :)

-1
ответ дан 27 November 2019 в 23:35
поделиться

Продолжая предложение Мухука и добавляя сигналы Django и уникальный dispatch_uid, вы можете сбрасывать состояние при сохранении без отмены save ():

from django.db.models.signals import post_save

class DirtyFieldsMixin(object):
    def __init__(self, *args, **kwargs):
        super(DirtyFieldsMixin, self).__init__(*args, **kwargs)
        post_save.connect(self._reset_state, sender=self.__class__, 
                            dispatch_uid='%s-DirtyFieldsMixin-sweeper' % self.__class__.__name__)
        self._reset_state()

    def _reset_state(self, *args, **kwargs):
        self._original_state = self._as_dict()

    def _as_dict(self):
        return dict([(f.name, getattr(self, f.name)) for f in self._meta.local_fields if not f.rel])

    def get_dirty_fields(self):
        new_state = self._as_dict()
        return dict([(key, value) for key, value in self._original_state.iteritems() if value != new_state[key]])

Что бы очистить исходное состояние один раз сохранены без необходимости переопределения save ().

3
ответ дан 27 November 2019 в 23:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: