title: django historical object values
body: <p>I know there is reversion out there, I know there is fullhistory branch in django. BUT I would VERY much like to stick with original history of django objects. I just simply need to make sure I also save OLD and NEW values. </p>
  
  <p>By default django just saves WHAT happened (e.g. update) but doesnt store the values. Anybody can point me to something (snippet or app) that slightly enhances the default history of django and stores also the values of edited attributes not just the fact that it was edited. </p>
  
  <p>Now My history says</p>
  
  <blockquote>
    <p>9-01-2012 12:55:02   chnaged: time</p>
  </blockquote>
  
  <p>I want it to say</p>
  
  <blockquote>
    <p>9-01-2012 12:55:02   chnaged: time from 6 to 8</p>
  </blockquote>
  
  <p><strong>UPDATE:</strong> ==> for anyone interested in my solution (based on answer below)..</p>
  
  <ol>
  <li><p>Added HistoryModel(object) class to my models.py</p>
  
  <pre><code>   class HistoryModel(object):
           changed_fields = {}
  </code></pre></li>
  <li><p>Inherited in any of my models</p></li>
  <li><p>Added a pre_save receiver to save old values:</p>
  
  <pre><code>    @receiver(pre_save, sender=Customer) 
      def save_old_values(sender,**kwargs):
          #dont delete using in eval
          db_obj = sender.objects.get(pk=kwargs['instance'].pk)
          for field in kwargs['instance']._meta.fields:
              if not eval("db_obj." + str(field.get_attname_column()[0])) == eval("kwargs['instance']." +  str(field.get_attname_column()[0])):
                       kwargs['instance'].changed_fields[field.get_attname_column()[0]] = "from "+str(eval("db_obj." + str(field.get_attname_column()[0]))) + " to " + str(eval("kwargs['instance']." +  str(field.get_attname_column()[0])))
  </code></pre></li>
  <li><p>Overwrote the log_change method in my admin and collected object.changed_fields dict and stored it as a message</p></li>
  </ol>