def test_div_attrs_context(self): i = widgets.DatePickerInput(format='%d/%m/%Y') ctx = i.get_context('test_input', None, {}) self.assertEqual(ctx['div_attrs'], { 'data-oscarWidget': 'date', 'data-dateFormat': 'DD/MM/YYYY', })
class OrderSearchForm(forms.Form): date_from = forms.DateField(required=False, label=pgettext_lazy("start date", "From"), widget=widgets.DatePickerInput()) date_to = forms.DateField(required=False, label=pgettext_lazy("end date", "To"), widget=widgets.DatePickerInput()) order_number = forms.CharField(required=False, label=_("Order number")) def clean(self): if self.is_valid() and not any([ self.cleaned_data['date_from'], self.cleaned_data['date_to'], self.cleaned_data['order_number'] ]): raise forms.ValidationError(_("At least one field is required.")) return super(OrderSearchForm, self).clean() def description(self): """ Uses the form's data to build a useful description of what orders are listed. """ if not self.is_bound or not self.is_valid(): return _('All orders') else: date_from = self.cleaned_data['date_from'] date_to = self.cleaned_data['date_to'] order_number = self.cleaned_data['order_number'] return self._orders_description(date_from, date_to, order_number) def _orders_description(self, date_from, date_to, order_number): if date_from and date_to: if order_number: desc = _('Orders placed between %(date_from)s and ' '%(date_to)s and order number containing ' '%(order_number)s') else: desc = _('Orders placed between %(date_from)s and ' '%(date_to)s') elif date_from: if order_number: desc = _('Orders placed since %(date_from)s and ' 'order number containing %(order_number)s') else: desc = _('Orders placed since %(date_from)s') elif date_to: if order_number: desc = _('Orders placed until %(date_to)s and ' 'order number containing %(order_number)s') else: desc = _('Orders placed until %(date_to)s') elif order_number: desc = _('Orders with order number containing %(order_number)s') else: return None params = { 'date_from': date_from, 'date_to': date_to, 'order_number': order_number, } return desc % params def get_filters(self): date_from = self.cleaned_data['date_from'] date_to = self.cleaned_data['date_to'] order_number = self.cleaned_data['order_number'] kwargs = {} if date_from and date_to: kwargs['date_placed__range'] = [date_from, date_to] elif date_from and not date_to: kwargs['date_placed__gt'] = date_from elif not date_from and date_to: kwargs['date_placed__lt'] = date_to if order_number: kwargs['number__contains'] = order_number return kwargs
def test_datepickerinput_format_unicode(self): # Check that the widget can handle unicode formats i = widgets.DatePickerInput(format='δ-%d/%m/%Y') date = datetime.date(2017, 5, 1) html = i.render('date', date) self.assertIn('value="δ-01/05/2017"', html)
def test_icon_classes_context(self): i = widgets.DatePickerInput(format='%H:%M') ctx = i.get_context('test_input', None, {}) self.assertEqual(ctx['icon_classes'], 'far fa-calendar-alt')
class VoucherForm(forms.Form): """ A specialised form for creating a voucher and offer model. """ name = forms.CharField(label=_("Name")) code = forms.CharField(label=_("Code")) start_date = forms.DateField(label=_("Start date"), widget=widgets.DatePickerInput()) end_date = forms.DateField(label=_("End date"), widget=widgets.DatePickerInput()) usage = forms.ChoiceField(choices=Voucher.USAGE_CHOICES, label=_("Usage")) benefit_range = forms.ModelChoiceField( label=_('Which products get a discount?'), queryset=Range.objects.all(), ) type_choices = ( (Benefit.PERCENTAGE, _('Percentage off of products in range')), (Benefit.FIXED, _('Fixed amount off of products in range')), ) benefit_type = forms.ChoiceField( choices=type_choices, label=_('Discount type'), ) benefit_value = forms.DecimalField(label=_('Discount value')) def __init__(self, voucher=None, *args, **kwargs): self.voucher = voucher super(VoucherForm, self).__init__(*args, **kwargs) def clean_name(self): name = self.cleaned_data['name'] try: voucher = Voucher.objects.get(name=name) except Voucher.DoesNotExist: pass else: if (not self.voucher) or (voucher.id != self.voucher.id): raise forms.ValidationError( _("The name '%s' is already in use") % name) return name def clean_code(self): code = self.cleaned_data['code'].strip().upper() if not code: raise forms.ValidationError(_("Please enter a voucher code")) try: voucher = Voucher.objects.get(code=code) except Voucher.DoesNotExist: pass else: if (not self.voucher) or (voucher.id != self.voucher.id): raise forms.ValidationError( _("The code '%s' is already in use") % code) return code def clean(self): cleaned_data = super(VoucherForm, self).clean() start_date = cleaned_data.get('start_date', None) end_date = cleaned_data.get('end_date', None) if start_date and end_date and end_date < start_date: raise forms.ValidationError( _("The start date must be before the end date")) return cleaned_data
class OrderSearchForm(forms.Form): date_from = forms.DateField(required=False, label=pgettext_lazy("start date", "开始日期"), widget=widgets.DatePickerInput()) date_to = forms.DateField(required=False, label=pgettext_lazy("end date", "结束日期"), widget=widgets.DatePickerInput()) order_number = forms.CharField(required=False, label=_("订单号")) def clean(self): if self.is_valid() and not any([ self.cleaned_data['date_from'], self.cleaned_data['date_to'], self.cleaned_data['order_number'] ]): raise forms.ValidationError(_("请填写至少一个查询条件")) return super().clean() def description(self): """ Uses the form's data to build a useful description of what orders are listed. """ if not self.is_bound or not self.is_valid(): return _('所有订单') else: date_from = self.cleaned_data['date_from'] date_to = self.cleaned_data['date_to'] order_number = self.cleaned_data['order_number'] return self._orders_description(date_from, date_to, order_number) def _orders_description(self, date_from, date_to, order_number): if date_from and date_to: if order_number: desc = _('从%(date_from)s 到 ' '%(date_to)s ' '订单编号包括%(order_number)s的订单:') else: desc = _('从%(date_from)s到 ' '%(date_to)s的订单:') elif date_from: if order_number: desc = _('从%(date_from)s开始' '订单号包括%(order_number)s的订单:') else: desc = _('从%(date_from)s开始的订单:') elif date_to: if order_number: desc = _('截止到%(date_to)s' '订单编号包括%(order_number)s的订单') else: desc = _('截止到%(date_to)s的订单:') elif order_number: desc = _('包含订单编号%(order_number)s的订单:') else: return None params = { 'date_from': date_from, 'date_to': date_to, 'order_number': order_number, } return desc % params def get_filters(self): date_from = self.cleaned_data['date_from'] date_to = self.cleaned_data['date_to'] order_number = self.cleaned_data['order_number'] kwargs = {} if date_from and date_to: kwargs['date_placed__range'] = [date_from, date_to] elif date_from and not date_to: kwargs['date_placed__gt'] = date_from elif not date_from and date_to: kwargs['date_placed__lt'] = date_to if order_number: kwargs['number__contains'] = order_number return kwargs