diff --git a/django/contrib/history/models.py b/django/contrib/history/models.py index 9cb8d8253f..f1ce4645e5 100644 --- a/django/contrib/history/models.py +++ b/django/contrib/history/models.py @@ -3,12 +3,12 @@ from django.db.models import signals, get_models from django.dispatch import dispatcher from django.contrib.auth.models import User from django.contrib.contenttypes.models import ContentType -from tut1.polls.models import Poll #Temp import of used models +#from tut1.polls.models import Poll, Choice #Temp import of used models # Misc stuff import cPickle as Pickle from datetime import datetime from django.utils.text import capfirst -#from django.contrib.history.api import get_object, save_new_revision + class ChangeLog(models.Model): change_time = models.DateTimeField (_('time of change'), auto_now=True) @@ -16,7 +16,6 @@ class ChangeLog(models.Model): content_type = models.ForeignKey(ContentType) parent = models.GenericForeignKey() object_id = models.IntegerField(_('object ID')) - #parent = models.ForeignKey(Poll) user = models.ForeignKey(User, default="1") object = models.TextField() @@ -63,49 +62,28 @@ def list_history(parent_id, **kwargs): """ if kwargs: list = ChangeLog.objects.filter(object_id=parent_id)[:kwargs['offset']] - #for l in list: - # print l.parent.id return list else: return ChangeLog.objects.filter(object_id=parent_id) -#def version(object, num=5): -# """ Returns last 'num' revisions of the 'object'. """ -# return ChangeLog.objects.order_by('-id').filter(parent=object.id)[:num] - def version_by_date(object, date): """ Returns a list of revisions made at 'date'. """ return ChangeLog.objects.filter(object_id=object.id).filter(change_time__exact=date) -def get_all_models(): - app_list = [] - - for app in models.get_apps(): - app_models = get_models(app) - app_label = app_models[0]._meta.app_label - - model_list = [] - - for m in app_models: - model_list.append({ - 'name': capfirst(m._meta.verbose_name_plural), - }) - - if model_list: - model_list.sort() - app_list.append({ - 'name': app_label.title(), - 'models': model_list, - }) - - for app in app_list: - #print app['name'] - #print app['models'] +def _get_enabled_models(): + """ Returns a list of History-enabled models. """ + model_list = [] + for model in models.get_models(): + try: + if model.History: + model_list.append({'module': model.__module__, + 'name': model.__name__}) + except: + pass + return model_list - for m in app['models']: - print m['name'] ######################### # Pre-save signal catch # @@ -113,20 +91,31 @@ def get_all_models(): def save_new_revision(sender, instance, signal, *args, **kwargs): """ Saves a old copy of the record into the History table.""" - #modelname = instance.__class__.__name__ - #print modelname - old = Poll.objects.filter(pk=instance.id) - print old - if instance.History: - print "Admin" - print Poll._meta - print instance.id + print "Sender: ",sender + + instance_name = instance.__class__.__name__ + #print instance_name + global m + + for model in _get_enabled_models(): + if model['name'] is instance_name: + try: + m = __import__(model['module'], '', '', [model['name']]) + #print model['module'],": ",model['name'],"- ",m + except: + print "Model import error." + + if not isinstance(sender, instance_name): + print "Bad sender, exit." + return 0 + + old = getattr(m, model['name']).objects.filter(pk=instance.id) + print "Old: ",old + print "Instance: ",instance.id log = ChangeLog(parent=instance) - print log - #log.parent_id = instance.id - #log.user_id = .user_id + print "Log: ",log log.object = Pickle.dumps(old[0], protocol=0) log.save() print "New change saved." -dispatcher.connect( save_new_revision, signal=signals.pre_save, sender=Poll ) +dispatcher.connect( save_new_revision, signal=signals.pre_save )