""" Checkout forms """ from django import forms from store_order.models import Order import re def strip_non_numbers(data): """ gets rid of all non-number characters """ non_numbers = re.compile(r'\D') return non_numbers.sub('', data) # Currently not used, can remove if we don't need in future class CheckoutForm(forms.ModelForm): """ checkout form class to collect user billing and shipping information for placing an order """ def __init__(self, *args, **kwargs): super(CheckoutForm, self).__init__(*args, **kwargs) # override default attributes for field in self.fields: self.fields[field].widget.attrs['size'] = '30' self.fields['shipping_state'].widget.attrs['size'] = '3' self.fields['billing_state'].widget.attrs['size'] = '3' self.fields['billing_zip'].widget.attrs['size'] = '6' class Meta: model = Order exclude = ('status', 'ip_address', 'user', 'transaction_id') def clean_phone(self): """ Validate the phone field """ phone = self.cleaned_data['phone'] stripped_phone = strip_non_numbers(phone) if len(stripped_phone) < 10: error_str = 'Enter a valid phone number with area code.'\ '(e.g. 555-555-5555)' raise forms.ValidationError(error_str) return self.cleaned_data['phone']