Browse Source

Add an IPSubnet inline form on the VPN admin page

Baptiste Jonglez 10 years ago
parent
commit
b4cabaabfb
3 changed files with 11 additions and 14 deletions
  1. 6 0
      coin/configuration/admin.py
  2. 2 12
      coin/offers/admin.py
  3. 3 2
      coin/vpn/admin.py

+ 6 - 0
coin/configuration/admin.py

@@ -2,6 +2,7 @@
 from django.contrib import admin
 from polymorphic.admin import PolymorphicParentModelAdmin, PolymorphicChildModelAdmin
 
+from coin.resources.models import IPSubnet
 from coin.configuration.models import Configuration
 from coin.configuration.forms import ConfigurationForm
 
@@ -11,6 +12,11 @@ ConfigurationAdminFormMixin. This make use of ConfigurationForm form that
 filter offersubscription select input to avoid selecting wrong subscription.
 """
 
+class IPSubnetInline(admin.TabularInline):
+    model = IPSubnet
+    extra = 0
+
+
 class ParentConfigurationAdmin(PolymorphicParentModelAdmin):
     base_model = Configuration
     polymorphic_list = True

+ 2 - 12
coin/offers/admin.py

@@ -6,15 +6,9 @@ from coin.offers.models import Offer, OfferSubscription
 from coin.offers.offersubscription_filter import\
             OfferSubscriptionTerminationFilter,\
             OfferSubscriptionCommitmentFilter
-from coin.resources.models import IPSubnet
 import autocomplete_light
 
 
-class IPSubnetInline(admin.TabularInline):
-    model = IPSubnet
-    extra = 0
-
-
 class OfferAdmin(admin.ModelAdmin):
     list_display = ('configuration_type', 'name', 'billing_period', 'period_fees',
                     'initial_fees')
@@ -47,20 +41,16 @@ class OfferSubscriptionAdmin(admin.ModelAdmin):
              )
     form = autocomplete_light.modelform_factory(OfferSubscription)
 
-    inlines = [ IPSubnetInline ]
-
     def get_inline_instances(self, request, obj=None):
         """
         Si en edition, alors affiche en inline le formulaire de la configuration
         correspondant à l'offre choisie
         """
-        ipsubnet_inline = [IPSubnetInline(self.model, self.admin_site)]
-
         if obj is not None:
             for item in PolymorphicChildModelAdmin.__subclasses__():
                 if (item.base_model.__name__ == obj.offer.configuration_type):
-                    return [item.inline(self.model, self.admin_site)] + ipsubnet_inline
-        return ipsubnet_inline
+                    return [item.inline(self.model, self.admin_site)]
+        return []
 
 admin.site.register(Offer, OfferAdmin)
 admin.site.register(OfferSubscription, OfferSubscriptionAdmin)

+ 3 - 2
coin/vpn/admin.py

@@ -3,7 +3,7 @@ from django.contrib import admin
 from polymorphic.admin import PolymorphicChildModelAdmin
 
 from coin.vpn.models import VPNConfiguration
-from coin.configuration.admin import ConfigurationAdminFormMixin
+from coin.configuration.admin import ConfigurationAdminFormMixin, IPSubnetInline
 from coin.utils import delete_selected
 
 
@@ -26,7 +26,8 @@ class VPNConfigurationAdmin(ConfigurationAdminFormMixin, PolymorphicChildModelAd
     actions = (delete_selected, "generate_endpoints", "generate_endpoints_v4",
                "generate_endpoints_v6", "activate", "deactivate")
     exclude = ("password",)
-    inline = VPNConfigurationInline
+    # TODO: this should be done in the generic configuration admin.
+    inlines = (IPSubnetInline, )
 
     def get_readonly_fields(self, request, obj=None):
         if obj: