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
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):
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
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:
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