Browse Source

Don't show country field if only one is available

This affects the shipping address form in checkout.
master
David Winterbottom 12 years ago
parent
commit
a77e78cc23
2 changed files with 20 additions and 11 deletions
  1. 10
    6
      oscar/apps/checkout/forms.py
  2. 10
    5
      oscar/apps/checkout/views.py

+ 10
- 6
oscar/apps/checkout/forms.py View File

8
 from oscar.core.compat import get_user_model
8
 from oscar.core.compat import get_user_model
9
 
9
 
10
 User = get_user_model()
10
 User = get_user_model()
11
+Country = get_model('address', 'Country')
11
 
12
 
12
 
13
 
13
 class ShippingAddressForm(AbstractAddressForm):
14
 class ShippingAddressForm(AbstractAddressForm):
14
 
15
 
15
     def __init__(self, *args, **kwargs):
16
     def __init__(self, *args, **kwargs):
16
         super(ShippingAddressForm, self).__init__(*args, **kwargs)
17
         super(ShippingAddressForm, self).__init__(*args, **kwargs)
17
-        self.set_country_queryset()
18
-        self.fields['country'].empty_label = None
18
+        countries = Country._default_manager.filter(
19
+            is_shipping_country=True)
19
 
20
 
20
-    def set_country_queryset(self):
21
-        self.fields['country'].queryset = get_model(
22
-            'address', 'country')._default_manager.filter(
23
-                is_shipping_country=True)
21
+        # No need to show country dropdown if there is only one option
22
+        if len(countries) == 1:
23
+            del self.fields['country']
24
+            self.instance.country = countries[0]
25
+        else:
26
+            self.fields['country'].queryset = countries
27
+            self.fields['country'].empty_label = None
24
 
28
 
25
     class Meta:
29
     class Meta:
26
         model = get_model('order', 'shippingaddress')
30
         model = get_model('order', 'shippingaddress')

+ 10
- 5
oscar/apps/checkout/views.py View File

149
         return UserAddress._default_manager.filter(user=self.request.user).order_by('-is_default_for_shipping')
149
         return UserAddress._default_manager.filter(user=self.request.user).order_by('-is_default_for_shipping')
150
 
150
 
151
     def post(self, request, *args, **kwargs):
151
     def post(self, request, *args, **kwargs):
152
-        # Check if a shipping address was selected directly (eg no form was filled in)
152
+        # Check if a shipping address was selected directly (eg no form was
153
+        # filled in)
153
         if self.request.user.is_authenticated() and 'address_id' in self.request.POST:
154
         if self.request.user.is_authenticated() and 'address_id' in self.request.POST:
154
-            address = UserAddress._default_manager.get(pk=self.request.POST['address_id'],
155
-                                                       user=self.request.user)
155
+            address = UserAddress._default_manager.get(
156
+                pk=self.request.POST['address_id'], user=self.request.user)
156
             action = self.request.POST.get('action', None)
157
             action = self.request.POST.get('action', None)
157
             if action == 'ship_to':
158
             if action == 'ship_to':
158
                 # User has selected a previous address to ship to
159
                 # User has selected a previous address to ship to
166
             else:
167
             else:
167
                 return HttpResponseBadRequest()
168
                 return HttpResponseBadRequest()
168
         else:
169
         else:
169
-            return super(ShippingAddressView, self).post(request, *args, **kwargs)
170
+            return super(ShippingAddressView, self).post(
171
+                request, *args, **kwargs)
170
 
172
 
171
     def form_valid(self, form):
173
     def form_valid(self, form):
172
         # Store the address details in the session and redirect to next step
174
         # Store the address details in the session and redirect to next step
173
-        self.checkout_session.ship_to_new_address(form.clean())
175
+        address_fields = dict(
176
+            (k, v) for (k, v) in form.instance.__dict__.items()
177
+            if not k.startswith('_'))
178
+        self.checkout_session.ship_to_new_address(address_fields)
174
         return super(ShippingAddressView, self).form_valid(form)
179
         return super(ShippingAddressView, self).form_valid(form)
175
 
180
 
176
     def get_success_url(self):
181
     def get_success_url(self):

Loading…
Cancel
Save