+ fields = ('user', 'role')
+
+ def formfield_for_foreignkey(self, db_field, request, **kwargs):
+ if db_field.name == 'slice':
+ if not request.user.is_admin:
+ # only show slices at sites where caller has admin or pi role
+ roles = Role.objects.filter(role_type__in=['admin', 'pi'])
+ site_privileges = SitePrivilege.objects.filter(user=request.user).filter(role__in=roles)
+ sites = [site_privilege.site for site_privilege in site_privileges]
+ slices = Slice.objects.filter(site__in=sites)
+ kwargs['queryset'] = slices
+ if db_field.name == 'user':
+ if not request.user.is_admin:
+ # only show users from sites where caller has admin or pi role
+ roles = Role.objects.filter(role_type__in=['admin', 'pi'])
+ site_privileges = SitePrivilege.objects.filter(user=request.user).filter(role__in=roles)
+ sites = [site_privilege.site for site_privilege in site_privileges]
+ site_privileges = SitePrivilege.objects.filter(site__in=sites)
+ emails = [site_privilege.user.email for site_privilege in site_privileges]
+ users = User.objects.filter(email__in=emails)
+ kwargs['queryset'] = list(users)
+
+ return super(SliceMembershipInline, self).formfield_for_foreignkey(db_field, request, **kwargs)
+
+class SliceNetworkInline(admin.TabularInline):
+ # exclude = ['enacted']
+ model = Network.slices.through
+ extra = 0
+ verbose_name = "Network Connection"
+ verbose_name_plural = "Network Connections"
+
+class SliceTagInline(PlStackTabularInline):
+ model = SliceTag
+ extra = 0