Beispiel #1
0
class ProjectForm(models.ModelForm):
    income = fields.DecimalField(required=False,widget=TextInput(attrs={'readonly':'true'}))
    expand = fields.DecimalField(required=False,widget=TextInput(attrs={'readonly':'true'}))

    class Meta:
        model = Project
        fields = '__all__'
Beispiel #2
0
    def __init__(self,
                 max_value=None,
                 min_value=None,
                 decimal_places=None,
                 *args,
                 **kwargs):
        errors = self.default_error_messages.copy()
        if 'error_messages' in kwargs:
            errors.update(kwargs['error_messages'])

        localize = kwargs.get('localize', False)

        fields_ = (
            fields.DecimalField(max_value=max_value,
                                min_value=min_value,
                                decimal_places=decimal_places,
                                error_messages={'invalid': errors['invalid']},
                                localize=localize),
            fields.DecimalField(max_value=max_value,
                                min_value=min_value,
                                decimal_places=decimal_places,
                                error_messages={'invalid': errors['invalid']},
                                localize=localize),
        )
        super(NumberRangeField, self).__init__(fields_, *args, **kwargs)
Beispiel #3
0
class JobForm(ModelForm):

    geoposition_0 = fields.DecimalField()
    geoposition_1 = fields.DecimalField()

    class Meta:
        model = Job
        fields = ['title', 'start_asap',]
class SimulatorForm(Form):
    idade_atual = fields.IntegerField(min_value=0)
    idade_saida = fields.IntegerField(min_value=50)
    rentabilidade_anual = fields.DecimalField(min_value=0, decimal_places=2)
    contribuicao_mensal = fields.DecimalField(min_value=0, decimal_places=2)
    # rentabilidade_anual = fields.IntegerField(min_value=0)
    # contribuicao_mensal = fields.IntegerField(min_value=0)
    sexo = fields.ChoiceField(choices=(('M', 'M'), ('F', 'F')))
    def __init__(self, *args, **kwargs):
        field_list = (
            fields.DecimalField(max_value=90, min_value=-90, decimal_places=18, max_digits=25),
            fields.DecimalField(max_value=180, min_value=-180, decimal_places=18, max_digits=25),
            fields.IntegerField(),
        )
        if 'query_field_id' in kwargs:
            kwargs['widget'] = GoogleMapWidget(query_field_id=kwargs.pop('query_field_id'))

        super(GoogleMapField, self).__init__(field_list, *args, **kwargs)
Beispiel #6
0
class CashInvoicePaymentForm(Form):
    receipt_number = fields.IntegerField()
    amount = fields.DecimalField(max_digits=8,
                                 decimal_places=2,
                                 validators=[validators.MinValueValidator(0)])

    def __init__(self, *args, instance, **kwargs):
        super().__init__(*args, **kwargs)
        self.instance = instance
        self.helper = FormHelper()
        self.helper.include_media = False
        layout = self.helper.build_default_layout(self)
        layout.fields.append(
            ButtonHolder(
                Submit('pay', 'Record Payment'),
                HTML(
                    '<a href="{}" class="btn btn-secondary">Cancel</a>'.format(
                        reverse(
                            'front_desk.check_in',
                            kwargs={
                                'username': self.instance.recipient.username
                            },
                        )))))
        self.helper.add_layout(layout)

    def clean_amount(self):
        amount = self.cleaned_data['amount']
        expected_amount = self.instance.total
        if amount != expected_amount:
            raise ValidationError(
                'The invoice was for USD {}'.format(expected_amount))
        return amount
Beispiel #7
0
class PubForm(forms.Form):
    no = fields.CharField(required=True,
                          label="课程号",
                          validators=[RegexValidator(r'\d{8}', "请输入数字")],
                          error_messages={
                              'required': '该字段必须要输入',
                              'invalid': '课程号为8位数字'
                          })
    name = fields.CharField(max_length=30,
                            min_length=2,
                            required=True,
                            label="课程名",
                            error_messages={
                                'max_length': '最大不能超过30个字',
                                'min_length': '最小不能少于2个字',
                                'invalid': '不符合格式要求'
                            })

    credit = fields.DecimalField(max_digits=2,
                                 decimal_places=1,
                                 max_value=5.0,
                                 error_messages={
                                     'invalid': '必须为一位小数',
                                     'max_value': '最大学分不应该超过5.0'
                                 },
                                 label="学分")
    college_id = fields.IntegerField(widget=widgets.Select(), label="授课学院")

    def __init__(self, *args, **kwargs):
        super(PubForm, self).__init__(*args, **kwargs)
        self.fields['college_id'].widget.choices = College.objects.values_list(
            "id", "name")
Beispiel #8
0
class LayerPropertiesForm(Form):
    visible = fields.NullBooleanField(required=False)
    use_extent = fields.NullBooleanField(required=False)
    clickable = fields.NullBooleanField(required=False)
    transparent = fields.NullBooleanField(required=False)
    opacity = fields.DecimalField(max_digits=4,
                                  decimal_places=1,
                                  required=False)
    allow_download = fields.NullBooleanField(required=False)
    class HeavyProductForm(ProductForm):
        weight = fields.DecimalField(max_digits=6, decimal_places=1)
        description = fields.Field(widget=widgets.HiddenInput, initial='XY')

        class Meta:
            model = Product
            entangled_fields = {'properties': ['weight']}

        field_order = ['name', 'tenant', 'active', 'weight']
Beispiel #10
0
class PubForm(forms.ModelForm):
    course_no = fields.CharField(
        required=True,
        label="课程号",
        validators=[RegexValidator(regex='^[0-9]{10}$', message="请输入数字")],
        error_messages={
            'required': '该字段必须要输入',
            'invalid': '课程号为8位数字'
        })
    course_name = fields.CharField(max_length=30,
                                   min_length=2,
                                   required=True,
                                   label="课程名",
                                   error_messages={
                                       'max_length': '最大不能超过30个字',
                                       'min_length': '最小不能少于2个字',
                                       'invalid': '不符合格式要求'
                                   })

    course_credit = fields.DecimalField(max_digits=2,
                                        decimal_places=1,
                                        max_value=5.0,
                                        error_messages={
                                            'invalid': '必须为一位小数',
                                            'max_value': '最大学分不应该超过5.0'
                                        },
                                        label="学分")
    course_desc = fields.CharField(widget=widgets.Textarea(),
                                   max_length=140,
                                   initial="暂无",
                                   label="课程描述")

    class Meta:
        model = Course
        fields = [
            "course_college",
        ]

    # 解决form初始化时数据库数据不刷新问题
    def __init__(self, *args, **kwargs):
        super(PubForm, self).__init__(*args, **kwargs)
        cour = Course.objects.last()
        n_date = datetime.datetime.now().strftime("%Y%m%d")
        if not cour:
            ini_no = n_date + '01'
        elif n_date > cour.course_no[:8]:
            ini_no = n_date + '01'
        else:
            ini_no = str(int(cour.course_no) + 1)
        self.fields['course_no'].initial = ini_no
Beispiel #11
0
class ChargesForm(Form):
    date = fields.DateField(label='date')
    value = fields.DecimalField(label='value')

    def clean(self):
        cleaned_data = super(ChargesForm, self).clean()
        date_charge = cleaned_data.get('date')
        value_charge = cleaned_data.get('value')
        today = date.today()
        if value_charge < 0:
            if date_charge > today:
                self.add_error('date', "Impossible to make a write-off")
                self.add_error('value', "Impossible to make a write-off")

        return cleaned_data
Beispiel #12
0
class DetailedForm(forms.Form):
    """
    required:是否必填
    error_messages:錯誤提示(要透過{{ obj.errors.user.0 }}調用)
    widget:訂製html插件(重要)
    label:訂製標籤名(要透過{{ obj.user.label }}調用)
    initial:默認值
    validators:自訂製驗證規則
    disabled:是否禁止編輯
    """
    user = fields.CharField(
        required=True,
        max_length=12,  # 最大長度
        min_length=3,  # 最小長度
        error_messages={},
        widget=widgets.TextInput(attrs={'n': 123}),  # 參數為自定義屬性
        label="用戶名",
        initial='請輸入用戶名',
        disabled=True,
    )
    age = fields.IntegerField(
        label="年齡",
        max_value=1000,  # 最大值
        min_value=0,  # 最小值
        error_messages={
            'max_value': '太大了',
        })
    email = fields.EmailField(label="信箱", )
    smath = fields.DecimalField()  # 小數
    file = fields.FileField()
    city = fields.ChoiceField(
        choices=[(1, "上海"), (2, "北京"), (3, "南京")],  # (value, 顯示文字)
        initial=3,  # 默認value=3
    )
    hobby = fields.MultipleChoiceField(
        choices=[(1, "籃球"), (2, "電動"), (3, "小說")],  # (value, 顯示文字)
        initial=[1, 2],
    )
    # date = fields.DateField()  # 格式:2015-09-01
    # datetime = fields.DateTimeField()  # 格式:2015-09-01 11:12
    radio = fields.ChoiceField(
        choices=[(1, 'man'), (2, 'woman')],
        widget=widgets.RadioSelect(),
    )
    check = fields.MultipleChoiceField(
        choices=[(1, 'man'), (2, 'woman')],
        widget=widgets.CheckboxSelectMultiple(),
    )
    from django.core.validators import RegexValidator
    my = fields.CharField(
        # 自定義正則一
        # validators可設置多個RegexValidator
        # RegexValidator(正則, 錯誤信息)
        validators=[
            RegexValidator(r"^[0-9]+$", "請輸入數字"),
            RegexValidator(r"^87[0-9]+$", "請以87開頭")
        ], )
    # 自定義正則二
    # fields.RegexField(正則),只可設置單個正則
    my2 = fields.RegexField(r"^[0-9]+$", error_messages={
        "invalid": "請輸入數字",
    })
Beispiel #13
0
    def __get_dynamicprocessform(self, process_id):
        d = DynamicFieldProcess.objects.filter(
            process=process_id).order_by('sequence')
        if d.count() == 0:
            return False
        dynfields = {}
        for f in d:
            max_length = [250, f.max_length][f.max_length > 0]
            required = [False, True][f.required]
            initial = None

            if f.fieldtype == 'CharField':
                formfield = fields.CharField(max_length=max_length,
                                             required=required,
                                             label=f.label,
                                             initial=initial)

            if f.fieldtype == 'TextField':
                formfield = TextField(required=required,
                                      label=f.label,
                                      initial=initial)

            if f.fieldtype == 'EmailField':
                formfield = fields.EmailField(max_length=max_length,
                                              required=required,
                                              label=f.label,
                                              initial=initial)

            if f.fieldtype == 'DateField':
                formfield = fields.DateField(
                    ('%d/%m/%Y', ),
                    widget=DateTimeInput(format='%d/%m/%Y',
                                         attrs={
                                             'class': 'brdatefield',
                                             'maxlength': '10'
                                         }),
                    required=required,
                    label=f.label,
                    initial=initial)

            if f.fieldtype == 'IntegerField':
                formfield = fields.IntegerField(required=required,
                                                label=f.label,
                                                min_value=0,
                                                initial=initial)

            if f.fieldtype == 'DecimalField':
                formfield = fields.DecimalField(max_digits=10,
                                                decimal_places=2,
                                                required=required,
                                                label=f.label,
                                                initial=initial)

            if f.fieldtype == 'BooleanField':
                formfield = fields.BooleanField(required=False,
                                                label=f.label,
                                                initial='true')

            if f.fieldtype == 'FileField':
                formfield = fields.FileField(required=required,
                                             label=f.label,
                                             initial=initial)

            dynfields[f.name] = formfield

        form = type('', (forms.Form, ), dynfields)

        def as_ext(self):
            return mark_safe(simplejson.dumps(self, cls=ExtJSONEncoder))

        form.as_ext = as_ext
        return form
Beispiel #14
0
    def __get_dynamicworkform(self, step_id, work_id=None):
        d = DynamicFieldStep.objects.filter(step=step_id).order_by('sequence')
        if d.count() == 0:
            return False
        dynfields = {}
        for f in d:
            max_length = [250, f.max_length][f.max_length > 0]
            required = [False, True][f.required]

            # Try get value, if the field already exist. For exampĺe, a reject work
            try:
                initial = u'' % WorkFieldValue.objects.get(dynamicfield=f,
                                                           work=work_id).value
            except:
                initial = None

            if f.fieldtype == 'CharField':
                formfield = fields.CharField(max_length=max_length,
                                             required=required,
                                             label=f.label,
                                             initial=initial)

            if f.fieldtype == 'TextField':
                formfield = TextField(required=required,
                                      label=f.label,
                                      initial=initial)

            if f.fieldtype == 'EmailField':
                formfield = fields.EmailField(max_length=max_length,
                                              required=required,
                                              label=f.label,
                                              initial=initial)

            if f.fieldtype == 'DateField':
                formfield = fields.DateField(
                    ('%d/%m/%Y', ),
                    widget=DateTimeInput(format='%d/%m/%Y',
                                         attrs={
                                             'class': 'brdatefield',
                                             'maxlength': '10'
                                         }),
                    required=required,
                    label=f.label,
                    initial=initial)

            if f.fieldtype == 'IntegerField':
                formfield = fields.IntegerField(required=required,
                                                label=f.label,
                                                min_value=0,
                                                initial=initial)

            if f.fieldtype == 'DecimalField':
                formfield = fields.DecimalField(max_digits=10,
                                                decimal_places=2,
                                                required=required,
                                                label=f.label,
                                                initial=initial)

            if f.fieldtype == 'BooleanField':
                formfield = fields.BooleanField(required=False,
                                                label=f.label,
                                                initial='true')

            if f.fieldtype == 'FileField':
                formfield = fields.FileField(required=required,
                                             label=f.label,
                                             initial=initial)

            dynfields[f.name] = formfield

            process = f.step.process
            sequence = f.step.sequence

        next_steps = Step.objects.filter(
            process=process, sequence__gt=sequence).order_by('sequence')
        if next_steps.count() > 0:
            for n in next_steps:
                if n.sequence == sequence + 1: selected = n.pk
            if not selected:
                selected = n.pk
            dynfields['step'] = ModelChoiceField(queryset=next_steps,
                                                 label=u'Próximo Passo',
                                                 empty_label=None,
                                                 initial=selected)

        form = type('', (forms.Form, ), dynfields)

        def as_ext(self):
            return mark_safe(simplejson.dumps(self, cls=ExtJSONEncoder))

        form.as_ext = as_ext
        return form
Beispiel #15
0
class form_glasses_final_inspection_technique_create(forms.Form):

    lab_number = forms.CharField(label='Lab Order Number',
                                 required=False,
                                 widget=forms.HiddenInput())

    pd = fields.DecimalField(label='双眼 PD',
                             required=False,
                             initial=0,
                             widget=forms.NumberInput())

    is_singgle_pd = fields.BooleanField(label='单PD',
                                        required=False,
                                        initial=False,
                                        widget=forms.NullBooleanSelect())

    od_pd = fields.DecimalField(label='右眼 PD',
                                required=False,
                                initial=0,
                                max_digits=5,
                                decimal_places=1,
                                widget=forms.NumberInput())

    os_pd = fields.DecimalField(label='左眼 PD',
                                required=False,
                                initial=0,
                                max_digits=5,
                                decimal_places=1,
                                widget=forms.NumberInput())

    od_asmbl_seght = fields.DecimalField(label='加工瞳高 OD',
                                         required=False,
                                         initial=0,
                                         max_digits=5,
                                         decimal_places=1,
                                         widget=forms.NumberInput())

    os_asmbl_seght = fields.DecimalField(label='加工瞳高 OS',
                                         required=False,
                                         initial=0,
                                         max_digits=5,
                                         decimal_places=1,
                                         widget=forms.NumberInput())

    od_prism = fields.DecimalField(label='右眼 Prism',
                                   required=False,
                                   initial=0,
                                   max_digits=5,
                                   decimal_places=2,
                                   widget=forms.NumberInput())

    od_base = fields.DecimalField(label='右眼 Base',
                                  required=False,
                                  initial=0,
                                  max_digits=5,
                                  decimal_places=2,
                                  widget=forms.NumberInput())

    os_prism = fields.DecimalField(label='左眼 Prism',
                                   required=False,
                                   initial=0,
                                   max_digits=5,
                                   decimal_places=2,
                                   widget=forms.NumberInput())

    os_base = fields.DecimalField(label='左眼 Base',
                                  required=False,
                                  initial=0,
                                  max_digits=5,
                                  decimal_places=2,
                                  widget=forms.NumberInput())

    od_prism1 = fields.DecimalField(label='右眼2 Prism',
                                    required=False,
                                    initial=0,
                                    max_digits=5,
                                    decimal_places=2,
                                    widget=forms.NumberInput())

    od_base1 = fields.DecimalField(label='右眼2 Base',
                                   required=False,
                                   initial=0,
                                   max_digits=5,
                                   decimal_places=2,
                                   widget=forms.NumberInput())

    os_prism1 = fields.DecimalField(label='左眼2 Prism',
                                    required=False,
                                    initial=0,
                                    max_digits=5,
                                    decimal_places=2,
                                    widget=forms.NumberInput())

    os_base1 = fields.DecimalField(label='左眼2 Base',
                                   required=False,
                                   initial=0,
                                   max_digits=5,
                                   decimal_places=2,
                                   widget=forms.NumberInput())

    blue_blocker = fields.BooleanField(required=False,
                                       initial=False,
                                       label='镜片抗蓝光',
                                       widget=forms.NullBooleanSelect())

    polarized = fields.BooleanField(required=False,
                                    initial=False,
                                    label='镜片偏光',
                                    widget=forms.NullBooleanSelect())

    light_responsive = fields.BooleanField(required=False,
                                           initial=False,
                                           label='镜片膜变',
                                           widget=forms.NullBooleanSelect())

    light_responsive_color = fields.ChoiceField(
        required=False,
        initial=False,
        label='变色颜色',
        choices=choices_models.LENS_COLOR_CHOICES,
        widget=forms.Select())

    co = fields.BooleanField(required=False,
                             initial=False,
                             label='超防水涂层',
                             widget=forms.NullBooleanSelect())

    tint = fields.BooleanField(required=False,
                               initial=False,
                               label='染色',
                               widget=forms.NullBooleanSelect())

    tint_deepness = fields.DecimalField(label='染色深度',
                                        required=False,
                                        initial=0,
                                        max_digits=4,
                                        decimal_places=0,
                                        widget=forms.NumberInput())

    is_gradient = fields.BooleanField(required=False,
                                      initial=False,
                                      label='渐变染色',
                                      widget=forms.NullBooleanSelect())

    is_d_thin = fields.BooleanField(required=False,
                                    initial=False,
                                    label='是否美薄',
                                    widget=forms.NullBooleanSelect())

    is_qualified = fields.BooleanField(label='是否合格',
                                       required=False,
                                       initial=False,
                                       widget=forms.NullBooleanSelect())

    comments = forms.CharField(
        label='备注',
        required=False,
        max_length=4096,
        widget=forms.Textarea(attrs={'class': 'form-control'}))

    assembler_id = fields.IntegerField(label='assembler_id',
                                       required=False,
                                       widget=forms.Select())

    # add lee 2020.8.4
    cutting_edge_user_id = fields.IntegerField(label='割边师',
                                               required=False,
                                               widget=forms.Select())
    beauty_user_id = fields.IntegerField(label='整型师',
                                         required=False,
                                         widget=forms.Select())
    # end

    od_sub_mirrors_height = fields.DecimalField(label='右眼子镜高',
                                                required=False,
                                                initial=0,
                                                max_digits=5,
                                                decimal_places=1,
                                                widget=forms.NumberInput())

    os_sub_mirrors_height = fields.DecimalField(label='左眼子镜高',
                                                required=False,
                                                initial=0,
                                                max_digits=5,
                                                decimal_places=1,
                                                widget=forms.NumberInput())

    is_special_handling = fields.BooleanField(label='加工要求是否合格',
                                              required=False,
                                              initial=False,
                                              widget=forms.NullBooleanSelect())
    od_tint_deepness = fields.DecimalField(label='右片染色深度',
                                           required=False,
                                           initial=0,
                                           max_digits=4,
                                           decimal_places=0,
                                           widget=forms.NumberInput())

    os_tint_deepness = fields.DecimalField(label='左片染色深度',
                                           required=False,
                                           initial=0,
                                           max_digits=4,
                                           decimal_places=0,
                                           widget=forms.NumberInput())

    clipon_qty = fields.DecimalField(label='夹片',
                                     required=False,
                                     initial=0,
                                     max_digits=5,
                                     decimal_places=1,
                                     widget=forms.NumberInput())
    is_polishing = fields.BooleanField(label='是否抛光',
                                       required=False,
                                       initial=False,
                                       widget=forms.NullBooleanSelect())
    is_near_light = fields.BooleanField(label='近光区是否完整',
                                        required=False,
                                        initial=False,
                                        widget=forms.NullBooleanSelect())
    coatings = fields.CharField(label='膜层')
    npd = fields.DecimalField(label='双眼 NPD',
                              required=False,
                              initial=0,
                              widget=forms.NumberInput())
    od_npd = fields.DecimalField(label='右眼 NPD',
                                 required=False,
                                 initial=0,
                                 max_digits=5,
                                 decimal_places=1,
                                 widget=forms.NumberInput())
    os_npd = fields.DecimalField(label='左眼 NPD',
                                 required=False,
                                 initial=0,
                                 max_digits=5,
                                 decimal_places=1,
                                 widget=forms.NumberInput())
Beispiel #16
0
class ChargeForm(Form):
    amount = fields.DecimalField(label='Сумма:',
                                 required=True,
                                 max_digits=7,
                                 decimal_places=2,
                                 widget=widgets.TextInput(
                                     attrs={
                                         'class': 'form___input',
                                         'Placeholder': '12345.00',
                                         'Pattern': '^[+-]?\d{0,5}(.\d{2})?$'
                                     }))

    # amount = fields.CharField(
    #     label='Сумма:',
    #     required=True, max_length=9,
    #     widget=widgets.Input(
    #         attrs={'class': 'form___input',
    #                'Placeholder': '12345.00',
    #                'Pattern': '^[+-]?\d{0,5}(.\d{2})?$'
    #                }
    #     )
    # )

    date = fields.DateField(
        label='Дата:',
        required=True,
        widget=widgets.DateInput(attrs={
            'class': 'form___input',
            'type': 'date',
            'placeholder': 'гггг-мм-дд'
        }))

    def clean(self):
        cleaned_data = super().clean()
        value_date_cln = self.cleaned_data.get('date')
        value_amount_cln = self.cleaned_data.get('amount')
        value_amount = self.data['amount']
        value_date = self.data['date']

        def check(field, name):
            """Попытка реализовать проверку для Safari"""
            if field == '':
                err = 'Введите значение в поле "{}"'.format(name)
                return self.add_error(None, err)
            if name == 'Сумма':
                p = re.compile(r'^[+-]?(\d*)(?:\.(\d*))?$')
                result = p.match(field)

                if result is None:
                    err = 'Формат поля "{}": 12345.67 '.format(name)
                    return self.add_error(None, err)
                else:
                    if result.groups()[0] is not None and len(
                            result.groups()[0]) > 5:
                        err = 'Максимальная сумма - 99999.99'
                        self.add_error(None, err)
                    if result.groups()[1] is not None and len(
                            result.groups()[1]) > 2:
                        err = 'После точки должно быть не более двух цифровых знаков'
                        self.add_error(None, err)
                    return
            if name == 'Дата':
                pattern = re.compile(r'^(\d{4})\-(\d{2})\-(\d{2})$')
                results = pattern.match(field)
                print(results)
                if results is None:
                    err = 'Формат поля "{}": 2012-12-24 '.format(name)
                    return self.add_error(None, err)
                else:
                    try:
                        date(int(results.groups()[0]),
                             int(results.groups()[1]),
                             int(results.groups()[2]))
                    except:
                        err = 'Неправильно введена дата!'
                        return self.add_error(None, err)

        check(value_amount, 'Сумма')
        check(value_date, 'Дата')

        if value_date_cln is not None and value_amount_cln is not None and \
                value_amount_cln < 0 and value_date_cln > date.today():
            self.add_error(None, 'Нельзя проводить списание в будущем!')
        return cleaned_data