Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. from django.conf import settings
  2. from django import forms
  3. from django.utils.translation import ugettext_lazy as _
  4. from django.forms.models import construct_instance
  5. from django.db.models import get_model
  6. UserAddress = get_model('address', 'useraddress')
  7. class AbstractAddressForm(forms.ModelForm):
  8. def __init__(self, *args, **kwargs):
  9. """
  10. Set fields in OSCAR_REQUIRED_ADDRESS_FIELDS as required.
  11. """
  12. super(AbstractAddressForm, self).__init__(*args, **kwargs)
  13. field_names = (set(self.fields) &
  14. set(settings.OSCAR_REQUIRED_ADDRESS_FIELDS))
  15. for field_name in field_names:
  16. self.fields[field_name].required = True
  17. class UserAddressForm(AbstractAddressForm):
  18. class Meta:
  19. model = UserAddress
  20. exclude = ('user', 'num_orders', 'hash', 'search_text')
  21. def __init__(self, user, *args, **kwargs):
  22. self.user = user
  23. super(UserAddressForm, self).__init__(*args, **kwargs)
  24. def clean(self):
  25. # Check this isn't a duplicate of another address
  26. cleaned_data = super(UserAddressForm, self).clean()
  27. candidate = construct_instance(
  28. self, self.instance, self._meta.fields)
  29. qs = self._meta.model.objects.filter(
  30. user=self.user,
  31. hash=candidate.generate_hash())
  32. if self.instance.id:
  33. qs = qs.exclude(id=self.instance.id)
  34. if qs.count() > 0:
  35. raise forms.ValidationError(_(
  36. "This address is already in your addressbook"))
  37. return cleaned_data
  38. def save(self, commit=True):
  39. instance = super(UserAddressForm, self).save(commit=False)
  40. instance.user = self.user
  41. if commit:
  42. instance.save()
  43. return instance