From 2371999bd6f279108174bdc5faecc009019ce1bc Mon Sep 17 00:00:00 2001
From: Paul van der Linden
Date: Tue, 15 May 2012 14:14:28 +0200
Subject: [PATCH] fix models in separate apps
---
easymode/tree/admin/relation.py | 35 ++++++++++++++++++++-------------
1 file changed, 21 insertions(+), 14 deletions(-)
diff --git a/easymode/tree/admin/relation.py b/easymode/tree/admin/relation.py
index b5e72e2..c8f48d0 100644
--- a/easymode/tree/admin/relation.py
+++ b/easymode/tree/admin/relation.py
@@ -104,27 +104,34 @@ class that this admin class makes editable:
invisible_in_admin = True
auto_aware = True
- children = []
+ _children = None
- _descriptor_cache = {}
+ _real_descriptor_cache = None
+
+ @property
+ def _descriptor_cache(self):
+ if self._real_descriptor_cache is None:
+ self._real_descriptor_cache = dict([(x[1].related.model, x[0]) for x in get_foreign_key_desciptors(self.model)])
+ return self._real_descriptor_cache
+
+ @property
+ def children(self):
+ if self._children is None:
+ if self.auto_aware:
+ self.children = self._descriptor_cache.keys()
+ else:
+ self.children = []
+ return self._children
+
+ @children.setter
+ def children(self, value):
+ self._children = value
class Media:
js = (
'easymode/js/adminoverride.js',
)
-
- def __init__(self, model, admin_site):
- super(ForeignKeyAwareModelAdmin, self).__init__(model, admin_site)
- # look up all foreign key descriptors
- descriptors = get_foreign_key_desciptors(self.model)
- self._descriptor_cache = dict([(x[1].related.model, x[0]) for x in descriptors])
-
- # if no children are set and autoaware is true,
- # set the children
- if not self.children and self.auto_aware:
- self.children = [x[1].related.model for x in descriptors]
-
def get_model_perms(self, request):
perms = super(ForeignKeyAwareModelAdmin, self).get_model_perms(request)
perms['invisible_in_admin'] = self.invisible_in_admin