Split shipherd NodeNavigationInline into inlines for hosted/targeting inlines. Added...
authorStephen Burrows <stephen.r.burrows@gmail.com>
Fri, 14 Jan 2011 17:02:03 +0000 (12:02 -0500)
committerStephen Burrows <stephen.r.burrows@gmail.com>
Fri, 14 Jan 2011 17:02:03 +0000 (12:02 -0500)
contrib/shipherd/admin.py
contrib/shipherd/models.py
contrib/shipherd/templatetags/shipherd.py

index 606971d..a54d0f1 100644 (file)
@@ -1,5 +1,6 @@
 from django.contrib import admin
 from philo.admin import TreeEntityAdmin, COLLAPSE_CLASSES, NodeAdmin
+from philo.models import Node
 from philo.contrib.shipherd.models import Navigation
 
 
@@ -34,8 +35,14 @@ class NavigationNavigationInline(NavigationInline):
        verbose_name_plural = "children"
 
 
-class NodeNavigationInline(NavigationInline):
-       verbose_name_plural = 'navigation'
+class NodeHostedNavigationInline(NavigationInline):
+       verbose_name_plural = 'hosted navigation'
+       fk_name = 'hosting_node'
+
+
+class NodeTargetingNavigationInline(NavigationInline):
+       verbose_name_plural = 'targeting navigation'
+       fk_name = 'target_node'
 
 
 class NavigationAdmin(TreeEntityAdmin):
@@ -60,7 +67,9 @@ class NavigationAdmin(TreeEntityAdmin):
        inlines = [NavigationNavigationInline] + TreeEntityAdmin.inlines
 
 
-NodeAdmin.inlines = [NodeNavigationInline] + NodeAdmin.inlines
+NodeAdmin.inlines = [NodeHostedNavigationInline, NodeTargetingNavigationInline] + NodeAdmin.inlines
 
 
+admin.site.unregister(Node)
+admin.site.register(Node, NodeAdmin)
 admin.site.register(Navigation, NavigationAdmin)
\ No newline at end of file
index 2577245..0643c3e 100644 (file)
@@ -71,11 +71,11 @@ class NavigationManager(TreeManager):
                return hosted_navigation
        
        def _add_to_cache(self, using, node, qs=None):
-               if node.pk is None:
-                       return
-               
                if qs is None:
-                       roots = node.hosted_navigation.select_related('target_node')
+                       try:
+                               roots = node.hosted_navigation.select_related('target_node')
+                       except AttributeError:
+                               roots = []
                        qs = self.none()
                        
                        for root in roots:
index db15d46..019d240 100644 (file)
@@ -87,6 +87,14 @@ def has_navigation(node):
        return bool(Navigation.objects.closest_navigation(node).count())
 
 
+@register.filter
+def navigation_host(node):
+       try:
+               return Navigation.objects.closest_navigation(node)[0].hosting_node
+       except:
+               return node
+
+
 @register.filter
 def targeting_navigation(node):
        return Navigation.objects.closest_navigation(node).filter(target_node=node).order_by('level', 'lft')
\ No newline at end of file