Changeset 3422
- Timestamp:
- 07/22/06 05:16:42 (2 years ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
django/branches/full-history/django/contrib/history/models.py
r3351 r3422 1 1 from django.db import models 2 from django.db.models import signals 2 from django.db.models import signals, get_models 3 3 from django.dispatch import dispatcher 4 4 from django.contrib.auth.models import User 5 from django.contrib.contenttypes.models import ContentType 5 6 from tut1.polls.models import Poll #Temp import of used models 6 7 # Misc stuff 7 8 import cPickle as Pickle 8 9 from datetime import datetime 10 from django.utils.text import capfirst 9 11 #from django.contrib.history.api import get_object, save_new_revision 10 12 11 13 class ChangeLog(models.Model): 12 change_time = models.DateTimeField(_('time of change'), auto_now=True) 13 parent = models.ForeignKey(Poll) 14 change_time = models.DateTimeField (_('time of change'), auto_now=True) 15 16 content_type = models.ForeignKey(ContentType) 17 parent = models.GenericForeignKey() 18 object_id = models.IntegerField(_('object ID')) 19 #parent = models.ForeignKey(Poll) 20 14 21 user = models.ForeignKey(User, default="1") 15 22 object = models.TextField() 23 comment = models.CharField(maxlength=250, default="Bla") 24 16 25 #object_type = models.CharField(maxlength=50) 17 26 #pub_date = models.DateTimeField('date published') … … 24 33 class Admin: 25 34 fields = ( 26 ('Meta info', {'fields': ('change_time', ' parent', 'user',)}),35 ('Meta info', {'fields': ('change_time', 'content_type', 'object_id', 'user', 'comment'),}), 27 36 ('Object', {'fields': ('object',),}), 28 37 ) 29 38 30 list_display = (' parent', 'user', 'change_time')39 list_display = ('object_id', 'user', 'change_time') 31 40 32 41 def get_object(self): … … 38 47 return self.id 39 48 40 ################ 41 # Other (API) methods 42 ################ 49 ####################### 50 # Other (API) methods # 51 ####################### 43 52 44 def get_version(object, offset= 1):53 def get_version(object, offset=0): 45 54 """ Returns 'current-offset' revision of the 'object' """ 46 list = ChangeLog.objects.order_by('-id').filter( parent=object.id)[offset]55 list = ChangeLog.objects.order_by('-id').filter(object_id=object.id)[offset] 47 56 print list.get_object() 48 57 return list 49 58 50 def list_history(parent_id, *args): 51 """ Returns a list of all revisions for that id. """ 52 if args: 53 return ChangeLog.objects.filter(parent=parent_id)[:args[0]] 54 #print "extra" 55 #return ChangeLog.objects.filter(parent=parent_id) 59 def list_history(parent_id, **kwargs): 60 """ 61 list_history(parent_id): Returns a list of all revisions for that id. 62 list_history(parent_id, offset=X): Returns a list of last X revisions. 63 """ 64 if kwargs: 65 list = ChangeLog.objects.filter(object_id=parent_id)[:kwargs['offset']] 66 #for l in list: 67 # print l.parent.id 68 return list 56 69 else: 57 return ChangeLog.objects.filter( parent=parent_id)70 return ChangeLog.objects.filter(object_id=parent_id) 58 71 59 def version(object, num=5): 60 """ Returns last 'num' revisions of the 'object'. """ 61 return ChangeLog.objects.order_by('-id').filter(parent=object.id)[:num] 72 #def version(object, num=5): 73 # """ Returns last 'num' revisions of the 'object'. """ 74 # return ChangeLog.objects.order_by('-id').filter(parent=object.id)[:num] 75 62 76 63 77 def version_by_date(object, date): 64 78 """ Returns a list of revisions made at 'date'. """ 65 return ChangeLog.objects.filter( parent=object.id).filter(change_time__exact=date)79 return ChangeLog.objects.filter(object_id=object.id).filter(change_time__exact=date) 66 80 81 82 def get_all_models(): 83 app_list = [] 84 85 for app in models.get_apps(): 86 app_models = get_models(app) 87 app_label = app_models[0]._meta.app_label 88 89 model_list = [] 90 91 for m in app_models: 92 model_list.append({ 93 'name': capfirst(m._meta.verbose_name_plural), 94 }) 95 96 if model_list: 97 model_list.sort() 98 app_list.append({ 99 'name': app_label.title(), 100 'models': model_list, 101 }) 102 103 for app in app_list: 104 #print app['name'] 105 #print app['models'] 106 107 for m in app['models']: 108 print m['name'] 109 110 ######################### 111 # Pre-save signal catch # 112 ######################### 67 113 68 114 def save_new_revision(sender, instance, signal, *args, **kwargs): … … 71 117 #print modelname 72 118 old = Poll.objects.filter(pk=instance.id) 73 log = ChangeLog() 74 log.parent_id = instance.id 119 print old 120 if instance.History: 121 print "Admin" 122 print Poll._meta 123 print instance.id 124 log = ChangeLog(parent=instance) 125 print log 126 #log.parent_id = instance.id 75 127 #log.user_id = .user_id 76 128 log.object = Pickle.dumps(old[0], protocol=0) … … 78 130 print "New change saved." 79 131 80 def _get_first_revision(object):81 pass82 83 84 132 dispatcher.connect( save_new_revision, signal=signals.pre_save, sender=Poll )
