Browse Source

Properly filter subscriptions on VPNSubscription admin page

Baptiste Jonglez 11 years ago
parent
commit
cb0c6919d0
3 changed files with 26 additions and 1 deletions
  1. 3 0
      coin/vpn/admin.py
  2. 23 0
      coin/vpn/forms.py
  3. 0 1
      coin/vpn/models.py

+ 3 - 0
coin/vpn/admin.py

@@ -1,6 +1,8 @@
+# -*- coding: utf-8 -*-
 from django.contrib import admin
 
 from coin.vpn.models import VPNSubscription
+from coin.vpn.forms import VPNSubscriptionForm
 
 
 class VPNAdmin(admin.ModelAdmin):
@@ -14,6 +16,7 @@ class VPNAdmin(admin.ModelAdmin):
                      'administrative_subscription__member__email')
     actions = ("generate_endpoints", "generate_endpoints_v4",
                "generate_endpoints_v6", "activate", "deactivate")
+    form = VPNSubscriptionForm
 
     def get_readonly_fields(self, request, obj=None):
         if obj:

+ 23 - 0
coin/vpn/forms.py

@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+
+from django.forms import ModelForm
+from django.db.models import Q
+
+from coin.offers.models import OfferSubscription
+from coin.vpn.models import VPNSubscription
+
+
+class VPNSubscriptionForm(ModelForm):
+
+    class Meta:
+        model = VPNSubscription
+
+    def __init__(self, *args, **kwargs):
+        super(VPNSubscriptionForm, self).__init__(*args, **kwargs)
+        if self.instance:
+            query = Q(offer__backend="openvpn_ldap") & (
+                # Select "unassociated" subscriptions, plus our own
+                # subscription (in case we are editing the object).
+                Q(("openvpn_ldap", None)) | Q(("openvpn_ldap", self.instance.pk)))
+            queryset = OfferSubscription.objects.filter(query)
+            self.fields['administrative_subscription'].queryset = queryset

+ 0 - 1
coin/vpn/models.py

@@ -17,7 +17,6 @@ class VPNSubscription(CoinLdapSyncModel):
     administrative_subscription = models.OneToOneField(
         'offers.OfferSubscription',
         related_name=backend_name,
-        limit_choices_to={'offer__backend': backend_name},
         validators=[ValidateBackendType(backend_name)])
     activated = models.BooleanField(default=False)
     login = models.CharField(max_length=50, unique=True)