您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

forms.py 1.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. from django import forms
  2. from django.forms.models import inlineformset_factory
  3. from django.utils.translation import ugettext_lazy as _
  4. from oscar.forms.fields import ExtendedURLField
  5. from oscar.core.loading import get_classes
  6. from oscar.apps.promotions.conf import PROMOTION_CLASSES, PROMOTION_POSITIONS
  7. RawHTML, SingleProduct, PagePromotion, HandPickedProductList, OrderedProduct = get_classes('promotions.models',
  8. ['RawHTML', 'SingleProduct', 'PagePromotion', 'HandPickedProductList',
  9. 'OrderedProduct'])
  10. class PromotionTypeSelectForm(forms.Form):
  11. choices = []
  12. for klass in PROMOTION_CLASSES:
  13. choices.append((klass.classname(), klass._type))
  14. promotion_type = forms.ChoiceField(choices=tuple(choices),
  15. label=_("Promotion type"))
  16. class RawHTMLForm(forms.ModelForm):
  17. class Meta:
  18. model = RawHTML
  19. exclude = ('display_type',)
  20. class HandPickedProductListForm(forms.ModelForm):
  21. class Meta:
  22. model = HandPickedProductList
  23. exclude = ('products',)
  24. OrderedProductFormSet = inlineformset_factory(HandPickedProductList,
  25. OrderedProduct, extra=2)
  26. class PagePromotionForm(forms.ModelForm):
  27. page_url = ExtendedURLField(label=_("URL"))
  28. position = forms.CharField(widget=forms.Select(choices=PROMOTION_POSITIONS),
  29. label=_("Position"),
  30. help_text=_("Where in the page this content block will appear"))
  31. class Meta:
  32. model = PagePromotion
  33. exclude = ('display_order', 'clicks', 'content_type', 'object_id')
  34. def clean_page_url(self):
  35. page_url = self.cleaned_data.get('page_url')
  36. if (page_url and page_url.startswith('/') and
  37. not page_url.endswith('/')):
  38. page_url += '/'
  39. return page_url