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
-~----------~----~----~----~------~----~------~--~---