models for per-controller dashboard views
[plstackapi.git] / planetstack / core / admin.py
index bc84554..f2679ff 100644 (file)
@@ -604,7 +604,15 @@ class DeploymentAdminForm(forms.ModelForm):
         #    a better way...
 
         self.manipulate_m2m_objs(deployment, self.cleaned_data['sites'], deployment.sitedeployments.all(), SiteDeployments, "deployment", "site")
-        self.manipulate_m2m_objs(deployment, self.cleaned_data['images'], deployment.imagedeployments.all(), DeploymentImages, "deployment", "image")
+        self.manipulate_m2m_objs(deployment, self.cleaned_data['images'], deployment.imagedeployments.all(), ImageDeployments, "deployment", "image")
+        # manipulate_m2m_objs doesn't work for Flavor/Deployment relationship
+        # so well handle that manually here
+        for flavor in deployment.flavors.all():
+            if getattr(flavor, 'name') not in self.cleaned_data['flavors']:
+                deployment.flavors.remove(flavor)
+        for flavor in self.cleaned_data['flavors']:
+            if flavor not in deployment.flavors.all():
+                flavor.deployments.add(deployment)
 
       self.save_m2m()
 
@@ -1252,14 +1260,22 @@ class UserAdmin(PermissionCheckingAdminMixin, UserAdmin):
     def queryset(self, request):
         return User.select_by_user(request.user)
 
+class ControllerDashboardInline(PlStackTabularInline):
+    model = ControllerDashboard
+    extra = 0
+    fields = ["controller", "url"]
+    suit_classes = 'suit-tab suit-tab-controllers'
+
 class DashboardViewAdmin(PlanetStackBaseAdmin):
     fieldsets = [('Dashboard View Details',
                    {'fields': ['backend_status_text', 'name', 'url'],
                     'classes': ['suit-tab suit-tab-general']})
                ]
     readonly_fields = ('backend_status_text', )
+    inlines = [ControllerDashboardInline]
 
-    suit_form_tabs =(('general','Dashboard View Details'),)
+    suit_form_tabs =(('general','Dashboard View Details'),
+                     ('controllers', 'Per-controller Dashboard Details'))
 
 class ServiceResourceInline(PlStackTabularInline):
     model = ServiceResource