Django

Code

Changeset 3452

Show
Ignore:
Timestamp:
07/26/06 05:52:08 (2 years ago)
Author:
utrebec
Message:

[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

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/branches/full-history/django/contrib/history/models.py

    r3422 r3452  
    44from django.contrib.auth.models import User 
    55from django.contrib.contenttypes.models import ContentType 
    6 from tut1.polls.models import Poll #Temp import of used models 
     6#from tut1.polls.models import Poll, Choice #Temp import of used models 
    77# Misc stuff 
    88import cPickle as Pickle 
    99from datetime import datetime 
    1010from django.utils.text import capfirst 
    11 #from django.contrib.history.api import get_object, save_new_revision 
     11 
    1212 
    1313class ChangeLog(models.Model): 
     
    1717    parent = models.GenericForeignKey() 
    1818    object_id = models.IntegerField(_('object ID')) 
    19     #parent = models.ForeignKey(Poll) 
    2019 
    2120    user = models.ForeignKey(User, default="1") 
     
    6463    if kwargs: 
    6564        list = ChangeLog.objects.filter(object_id=parent_id)[:kwargs['offset']] 
    66         #for l in list: 
    67         #    print l.parent.id 
    6865        return list 
    6966    else: 
    7067        return ChangeLog.objects.filter(object_id=parent_id) 
    71  
    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] 
    7568 
    7669 
     
    8073 
    8174 
    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'] 
     75def _get_enabled_models(): 
     76    """ Returns a list of History-enabled models. """ 
     77    model_list = [] 
     78    for model in models.get_models(): 
     79        try: 
     80            if model.History: 
     81                model_list.append({'module': model.__module__, 
     82                                   'name': model.__name__}) 
     83        except: 
     84            pass 
     85    return model_list 
    10686         
    107         for m in app['models']: 
    108             print m['name'] 
    10987 
    11088######################### 
     
    11492def save_new_revision(sender, instance, signal, *args, **kwargs): 
    11593    """ Saves a old copy of the record into the History table.""" 
    116     #modelname = instance.__class__.__name__ 
    117     #print modelname 
    118     old = Poll.objects.filter(pk=instance.id) 
    119     print old 
    120     if instance.History: 
    121         print "Admin" 
    122         print Poll._meta 
    123     print instance.id 
     94    print "Sender: ",sender 
     95 
     96    instance_name = instance.__class__.__name__ 
     97    #print instance_name 
     98    global m 
     99 
     100    for model in _get_enabled_models(): 
     101        if model['name'] is instance_name: 
     102            try: 
     103                m = __import__(model['module'], '', '', [model['name']]) 
     104                #print model['module'],": ",model['name'],"- ",m 
     105            except: 
     106                print "Model import error." 
     107     
     108    if not isinstance(sender, instance_name): 
     109        print "Bad sender, exit." 
     110        return 0 
     111 
     112    old = getattr(m, model['name']).objects.filter(pk=instance.id) 
     113    print "Old: ",old 
     114    print "Instance: ",instance.id 
    124115    log = ChangeLog(parent=instance) 
    125     print log 
    126     #log.parent_id = instance.id 
    127     #log.user_id = .user_id 
     116    print "Log: ",log 
    128117    log.object = Pickle.dumps(old[0], protocol=0) 
    129118    log.save() 
    130119    print "New change saved." 
    131120 
    132 dispatcher.connect( save_new_revision, signal=signals.pre_save, sender=Poll
     121dispatcher.connect( save_new_revision, signal=signals.pre_save