Properly log diffs in foreign keys
authorMagnus Hagander <magnus@hagander.net>
Sun, 11 Jan 2015 21:05:17 +0000 (13:05 -0800)
committerMagnus Hagander <magnus@hagander.net>
Sun, 11 Jan 2015 21:05:17 +0000 (13:05 -0800)
Instead of saying "topic changed to 2", say "topic changed to
<actual topic>"

pgcommitfest/commitfest/util.py

index 862ee3d2bb291254679c94da58bbf50dd623b90b..7a38c7b044b272ddede7177ee2b4310510df7bf5 100644 (file)
@@ -1,4 +1,5 @@
 from django.forms.models import model_to_dict
+import django.db.models.fields.related
 
 
 class DiffableModel(object):
@@ -16,6 +17,13 @@ class DiffableModel(object):
                d1 = self.__initial
                d2 = self._dict
                diffs = dict([(k, (v, d2[k])) for k, v in d1.items() if v != d2[k]])
+               # Foreign key lookups
+               for k,v in diffs.items():
+                       if type(self._meta.get_field_by_name(k)[0]) is django.db.models.fields.related.ForeignKey:
+                               # If it's a foreign key, look up the name again on ourselves.
+                               # Since we only care about the *new* value, it's easy enough.
+                               diffs[k] = (v[0], getattr(self, k))
+               # Many to many lookups
                if hasattr(self, 'map_manytomany_for_diff'):
                        for k,v in diffs.items():
                                if k in manytomanyfieldnames and self.map_manytomany_for_diff.has_key(k):