check-in fix for checkbox deletion not working in django 1.7
[plstackapi.git] / planetstack / core / admin.py
index 1d64d9c..94e8453 100644 (file)
@@ -419,6 +419,24 @@ class PlanetStackBaseAdmin(ReadOnlyAwareAdmin):
         instances = formset.save(commit=False)
         for instance in instances:
             instance.save_by_user(request.user)
+
+        # BUG in django 1.7? Objects are not deleted by formset.save if
+        # commit is False. So let's delete them ourselves.
+        #
+        # code from forms/models.py save_existing_objects()
+        try:
+            forms_to_delete = formset.deleted_forms\r
+        except AttributeError:\r
+            forms_to_delete = []
+        if formset.initial_forms:
+            for form in formset.initial_forms:
+                obj = form.instance
+                if form in forms_to_delete:
+                    if obj.pk is None:
+                        continue
+                    formset.deleted_objects.append(obj)
+                    obj.delete()
+
         formset.save_m2m()
 
 class SliceRoleAdmin(PlanetStackBaseAdmin):
@@ -535,7 +553,7 @@ class SiteAssocInline(PlStackTabularInline):
 
 class DeploymentAdmin(PlanetStackBaseAdmin):
     model = Deployment
-    fieldList = ['backend_status_text', 'name', 'sites', 'images', 'flavors', 'accessControl']
+    fieldList = ['backend_status_text', 'name', 'availability_zone', 'sites', 'images', 'flavors', 'accessControl']
     fieldsets = [(None, {'fields': fieldList, 'classes':['suit-tab suit-tab-sites']})]
     inlines = [DeploymentPrivilegeInline,NodeInline,TagInline] # ,ImageDeploymentsInline]
     list_display = ['backend_status_icon', 'name']
@@ -700,6 +718,15 @@ class SliceForm(forms.ModelForm):
             'service': LinkedSelect
         }
 
+    def clean(self):
+        cleaned_data = super(SliceForm, self).clean()
+        name = cleaned_data.get('name')
+        site_id = cleaned_data.get('site')
+        site = Slice.objects.get(id=site_id)
+        if not name.startswith(site.login_base):
+            raise forms.ValidationError('slice name must begin with %s' % site.login_base)
+        return cleaned_data
+
 class SliceAdmin(PlanetStackBaseAdmin):
     form = SliceForm
     fieldList = ['backend_status_text', 'site', 'name', 'serviceClass', 'enabled','description', 'service', 'slice_url', 'max_slivers']