Django

Code

Changeset 3422

Show
Ignore:
Timestamp:
07/22/06 05:16:42 (2 years ago)
Author:
utrebec
Message:

[full-history]
* ChangeLog? now uses ContentTypes?
* added "commet" field
* fixed get_version() default "offset"
* more generic list_history()
* added get_all_models() function (work-in-progress)
* removed _get_first_revision()

Files:

Legend:

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

    r3351 r3422  
    11from django.db import models 
    2 from django.db.models import signals 
     2from django.db.models import signals, get_models 
    33from django.dispatch import dispatcher 
    44from django.contrib.auth.models import User 
     5from django.contrib.contenttypes.models import ContentType 
    56from tut1.polls.models import Poll #Temp import of used models 
    67# Misc stuff 
    78import cPickle as Pickle 
    89from datetime import datetime 
     10from django.utils.text import capfirst 
    911#from django.contrib.history.api import get_object, save_new_revision 
    1012 
    1113class 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 
    1421    user = models.ForeignKey(User, default="1") 
    1522    object = models.TextField() 
     23    comment = models.CharField(maxlength=250, default="Bla") 
     24 
    1625    #object_type = models.CharField(maxlength=50) 
    1726    #pub_date = models.DateTimeField('date published') 
     
    2433    class Admin: 
    2534        fields = ( 
    26             ('Meta info', {'fields': ('change_time', 'parent', 'user',)}), 
     35            ('Meta info', {'fields': ('change_time', 'content_type', 'object_id', 'user', 'comment'),}), 
    2736            ('Object', {'fields': ('object',),}), 
    2837        ) 
    2938 
    30         list_display = ('parent', 'user', 'change_time') 
     39        list_display = ('object_id', 'user', 'change_time') 
    3140 
    3241    def get_object(self): 
     
    3847        return self.id 
    3948 
    40 ################ 
    41 # Other (API) methods 
    42 ################ 
     49####################### 
     50# Other (API) methods # 
     51####################### 
    4352 
    44 def get_version(object, offset=1): 
     53def get_version(object, offset=0): 
    4554    """ 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] 
    4756    print list.get_object() 
    4857    return list 
    4958 
    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) 
     59def 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 
    5669    else: 
    57         return ChangeLog.objects.filter(parent=parent_id) 
     70        return ChangeLog.objects.filter(object_id=parent_id) 
    5871 
    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 
    6276 
    6377def version_by_date(object, date): 
    6478    """ 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) 
    6680 
     81 
     82def 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######################### 
    67113 
    68114def save_new_revision(sender, instance, signal, *args, **kwargs): 
     
    71117    #print modelname 
    72118    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 
    75127    #log.user_id = .user_id 
    76128    log.object = Pickle.dumps(old[0], protocol=0) 
     
    78130    print "New change saved." 
    79131 
    80 def _get_first_revision(object): 
    81     pass 
    82  
    83  
    84132dispatcher.connect( save_new_revision, signal=signals.pre_save, sender=Poll )