में जोड़ने संकेतों के है:
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.attname, getattr(self, f.attname)) for f in self._meta.local_fields])
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]])
फर्क सिर्फ इतना है _as_dict
में है मैं
return dict([
(f.name, getattr(self, f.name)) for f in self._meta.local_fields
if not f.rel
])
से
return dict([
(f.attname, getattr(self, f.attname)) for f in self._meta.local_fields
])
के अंतिम पंक्ति बदल
यह mixin, ऊपर वाले की तरह है, इसलिए की तरह इस्तेमाल किया जा सकता है:
class MyModel(DirtyFieldsMixin, models.Model):
....
स्रोत
2011-01-13 02:03:00
मैंने गंदे क्षेत्रों के लिए समान प्रश्न देखे हैं, लेकिन यह वही समस्या है; व्यवस्थापक को बदलने के लिए क्या बदल गया है, आपको सबसे पहले यह पहचानने की आवश्यकता है कि क्या बदल गया ... – dnozay