選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

forms.py 2.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. from django import forms
  2. from django.db.models.loading import get_model
  3. from django.utils.translation import ugettext_lazy as _
  4. Voucher = get_model('voucher', 'Voucher')
  5. Benefit = get_model('offer', 'Benefit')
  6. Range = get_model('offer', 'Range')
  7. class VoucherForm(forms.Form):
  8. """
  9. A specialised form for creating a voucher and offer
  10. model.
  11. """
  12. name = forms.CharField(label=_("Name"))
  13. code = forms.CharField(label=_("Code"))
  14. start_date = forms.DateField(label=_("Start date"))
  15. end_date = forms.DateField(label=_("End date"))
  16. usage = forms.ChoiceField(choices=Voucher.USAGE_CHOICES, label=_("Usage"))
  17. benefit_range = forms.ModelChoiceField(
  18. label=_('Which products get a discount?'),
  19. queryset=Range.objects.all(),
  20. )
  21. type_choices = (
  22. (Benefit.PERCENTAGE, _('% off products in range')),
  23. (Benefit.FIXED, _('Fixed amount off products in range')),
  24. )
  25. benefit_type = forms.ChoiceField(
  26. choices=type_choices,
  27. label=_('Discount type'),
  28. )
  29. benefit_value = forms.DecimalField(
  30. label=_('Discount value'))
  31. def __init__(self, voucher=None, *args, **kwargs):
  32. self.voucher = voucher
  33. super(VoucherForm, self).__init__(*args, **kwargs)
  34. def clean_name(self):
  35. name = self.cleaned_data['name']
  36. try:
  37. voucher = Voucher.objects.get(name=name)
  38. except Voucher.DoesNotExist:
  39. pass
  40. else:
  41. if (not self.voucher) or (voucher.id != self.voucher.id):
  42. raise forms.ValidationError(_("The name '%s' is already in use") % name)
  43. return name
  44. def clean_code(self):
  45. code = self.cleaned_data['code'].strip().upper()
  46. if not code:
  47. raise forms.ValidationError(_("Please enter a voucher code"))
  48. try:
  49. voucher = Voucher.objects.get(code=code)
  50. except Voucher.DoesNotExist:
  51. pass
  52. else:
  53. if (not self.voucher) or (voucher.id != self.voucher.id):
  54. raise forms.ValidationError(_("The code '%s' is already in use") % code)
  55. return code
  56. def clean(self):
  57. cleaned_data = super(VoucherForm, self).clean()
  58. start_date = cleaned_data['start_date']
  59. end_date = cleaned_data['end_date']
  60. if end_date < start_date:
  61. raise forms.ValidationError(_("The start date must be before the end date"))
  62. return cleaned_data
  63. class VoucherSearchForm(forms.Form):
  64. name = forms.CharField(required=False, label=_("Name"))
  65. code = forms.CharField(required=False, label=_("Code"))
  66. is_active = forms.BooleanField(required=False, label=_("Is Active?"))
  67. def clean_code(self):
  68. return self.cleaned_data['code'].upper()