You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

forms.py 2.4KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. from django import forms
  2. from django.db.models import get_model
  3. basketline_model = get_model('basket', 'line')
  4. basket_model = get_model('basket', 'basket')
  5. class BasketLineForm(forms.ModelForm):
  6. save_for_later = forms.BooleanField(initial=False, required=False)
  7. class Meta:
  8. model = basketline_model
  9. exclude = ('basket', 'product', 'line_reference', )
  10. class SavedLineForm(forms.ModelForm):
  11. move_to_basket = forms.BooleanField(initial=False, required=False)
  12. class Meta:
  13. model = basketline_model
  14. exclude = ('basket', 'product', 'line_reference', 'quantity', )
  15. class BasketVoucherForm(forms.Form):
  16. code = forms.CharField(max_length=128)
  17. def __init__(self, *args, **kwargs):
  18. return super(BasketVoucherForm, self).__init__(*args,**kwargs)
  19. class AddToBasketForm(forms.Form):
  20. product_id = forms.IntegerField(widget=forms.HiddenInput(), min_value=1)
  21. quantity = forms.IntegerField(initial=1, min_value=1)
  22. def __init__(self, instance, *args, **kwargs):
  23. super(AddToBasketForm, self).__init__(*args, **kwargs)
  24. self.instance = instance
  25. if instance:
  26. if instance.is_group:
  27. self._create_group_product_fields(instance)
  28. else:
  29. self._create_product_fields(instance)
  30. def _create_group_product_fields(self, item):
  31. u"""
  32. Adds the fields for a "group"-type product (eg, a parent product with a
  33. list of variants.
  34. """
  35. choices = []
  36. for variant in item.variants.all():
  37. if variant.has_stockrecord:
  38. summary = u"%s (%s) - %.2f" % (variant.get_title(), variant.attribute_summary(),
  39. variant.stockrecord.price_incl_tax)
  40. choices.append((variant.id, summary))
  41. self.fields['product_id'] = forms.ChoiceField(choices=tuple(choices))
  42. def _create_product_fields(self, item):
  43. u"""Add the product option fields."""
  44. for option in item.options:
  45. self._add_option_field(item, option)
  46. def _add_option_field(self, item, option):
  47. u"""
  48. Creates the appropriate form field for the product option.
  49. This is designed to be overridden so that specific widgets can be used for
  50. certain types of options.
  51. """
  52. self.fields[option.code] = forms.CharField()