Author: utrebec
Date: 2006-07-26 05:52:08 -0500 (Wed, 26 Jul 2006)
New Revision: 3452

Modified:
   django/branches/full-history/django/contrib/history/models.py
Log:
[full-history]
* get_all_models() rewrite -> _get_enabled_models()
* save_new_revision():
  + works for any object
  + imports needed classes on-the-fly
  - BUG: NOT WORKING RIGHT!!! (loops because it wants to track itself)
* dispatcher.connect gets connection from Any model



Modified: django/branches/full-history/django/contrib/history/models.py
===================================================================
--- django/branches/full-history/django/contrib/history/models.py       
2006-07-26 00:15:01 UTC (rev 3451)
+++ django/branches/full-history/django/contrib/history/models.py       
2006-07-26 10:52:08 UTC (rev 3452)
@@ -3,20 +3,19 @@
 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)
 
     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 @@
     """
     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 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 )


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-updates
-~----------~----~----~----~------~----~------~--~---

Reply via email to