Skip to content

Commit de8b595

Browse files
authored
Merge pull request #228 from novafloss/float-numberfield
Float numberfield
2 parents ee22105 + 65059aa commit de8b595

10 files changed

+60
-57
lines changed

CHANGELOG.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ master (unreleased)
77

88
- Added a tox job to update/refresh the swagger-ui related static files (#210 / #213) - including documentation for developers.
99
- Remove the field size limit for the model field `formidable.models.Item.label` (#225).
10+
- handle decimal values in Number fields (#227)
1011

1112
Release 0.10.0 (2017-04-28)
1213
===========================

demo/tests/test_end_point.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ def test_queryset(self):
334334
class TestForm(FormidableForm):
335335
name = fields.CharField(label='Your name', default='Roméo')
336336
label = fields.CharField(label='label', default='Roméo')
337-
salary = fields.IntegerField()
337+
salary = fields.NumberField()
338338
birthdate = fields.DateField()
339339

340340
class Meta:
@@ -358,8 +358,8 @@ class Meta:
358358
def test_presets(self):
359359

360360
class MyTestForm(FormidableForm):
361-
value = fields.IntegerField()
362-
threshold = fields.IntegerField(
361+
value = fields.NumberField()
362+
threshold = fields.NumberField(
363363
accesses={'padawan': constants.READONLY,
364364
'jedi': constants.REQUIRED})
365365

@@ -414,8 +414,8 @@ class Meta:
414414
def test_no_preset(self):
415415

416416
class MyTestForm(FormidableForm):
417-
value = fields.IntegerField()
418-
threshold = fields.IntegerField(
417+
value = fields.NumberField()
418+
threshold = fields.NumberField(
419419
accesses={'padawan': constants.READONLY,
420420
'jedi': constants.REQUIRED})
421421

demo/tests/test_form_from_schema.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ class TestemailField(FormidableForm):
173173
def test_integer_field(self):
174174
class TestintegerField(FormidableForm):
175175
""" Test integer """
176-
integer = fields.IntegerField()
176+
integer = fields.NumberField()
177177

178178
formidable = TestintegerField.to_formidable(label='label')
179179

@@ -184,7 +184,7 @@ class TestintegerField(FormidableForm):
184184
form = form_class()
185185
self.assertIn('integer', form.fields)
186186
integer = form.fields['integer']
187-
self.assertEqual(type(integer), forms.IntegerField)
187+
self.assertEqual(type(integer), forms.DecimalField)
188188

189189
def test_file_field(self):
190190
class TestfileField(FormidableForm):
@@ -342,18 +342,18 @@ class TestdateField(FormidableForm):
342342
def test_with_validations(self):
343343
class FormWithValidations(FormidableForm):
344344
text = fields.CharField(validators=[MinLengthValidator(4)])
345-
integer = fields.IntegerField(validators=[GTEValidator(42)])
345+
integer = fields.NumberField(validators=[GTEValidator(42.4)])
346346

347347
formidable = FormWithValidations.to_formidable(label='validation')
348348

349349
schema = ContextFormSerializer(instance=formidable, context={
350350
'role': 'jedi'
351351
}).data
352352
form_class = get_dynamic_form_class_from_schema(schema)
353-
form = form_class(data={'text': 'tut', 'integer': 21})
353+
form = form_class(data={'text': 'tut', 'integer': 21.0})
354354
self.assertFalse(form.is_valid())
355355
self.assertEqual(len(form.errors), 2)
356-
form = form_class(data={'text': 'tutu', 'integer': 43})
356+
form = form_class(data={'text': 'tutu', 'integer': 43.2})
357357
self.assertTrue(form.is_valid())
358358

359359
def test_with_presets(self):

demo/tests/test_forms.py

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ def test_number_field(self):
254254
form = form_class()
255255
self.assertIn('input-number', form.fields)
256256
number = form.fields['input-number']
257-
self.assertEquals(type(number), forms.IntegerField)
257+
self.assertEquals(type(number), forms.DecimalField, type(number))
258258

259259
def test_required_field(self):
260260
self.text_field.accesses.create(access_id='human', level=REQUIRED)
@@ -472,44 +472,44 @@ def test_lt_ko(self):
472472
form = form_class(data={'input-number': '22'})
473473
self.assertFalse(form.is_valid())
474474

475-
def test_eq_integer_ok(self):
475+
def test_eq_number_ok(self):
476476
number = self.form.fields.create(
477477
slug='input-number', type_id='number', label='your number',
478478
order=self.form.get_next_field_order()
479479
)
480480
number.validations.create(type='EQ', value='21')
481481
form_class = self.form.get_django_form_class()
482-
form = form_class(data={'input-number': '21'})
482+
form = form_class(data={'input-number': '21.0'})
483483
self.assertTrue(form.is_valid())
484484

485-
def test_eq_integer_ko(self):
485+
def test_eq_number_ko(self):
486486
number = self.form.fields.create(
487487
slug='input-number', type_id='number', label='your number',
488488
order=self.form.get_next_field_order()
489489
)
490490
number.validations.create(type='EQ', value='21')
491491
form_class = self.form.get_django_form_class()
492-
form = form_class(data={'input-number': '22'})
492+
form = form_class(data={'input-number': '22.0'})
493493
self.assertFalse(form.is_valid())
494494

495-
def test_neq_integer_ok(self):
495+
def test_neq_number_ok(self):
496496
number = self.form.fields.create(
497497
slug='input-number', type_id='number', label='your number',
498498
order=self.form.get_next_field_order()
499499
)
500500
number.validations.create(type='NEQ', value='21')
501501
form_class = self.form.get_django_form_class()
502-
form = form_class(data={'input-number': '22'})
502+
form = form_class(data={'input-number': '22.0'})
503503
self.assertTrue(form.is_valid())
504504

505-
def test_neq_integer_ko(self):
505+
def test_neq_number_ko(self):
506506
number = self.form.fields.create(
507507
slug='input-number', type_id='number', label='your number',
508508
order=self.form.get_next_field_order()
509509
)
510510
number.validations.create(type='NEQ', value='21')
511511
form_class = self.form.get_django_form_class()
512-
form = form_class(data={'input-number': '21'})
512+
form = form_class(data={'input-number': '21.0'})
513513
self.assertFalse(form.is_valid())
514514

515515
def test_eq_str_ok(self):
@@ -804,8 +804,8 @@ class TestInnerPresets(TestCase):
804804

805805
def test_confirmation_fields(self):
806806
class TestPresets(FormidableForm):
807-
left = fields.IntegerField()
808-
right = fields.IntegerField()
807+
left = fields.NumberField()
808+
right = fields.NumberField()
809809

810810
class Meta:
811811
presets = [
@@ -817,43 +817,44 @@ class Meta:
817817

818818
formidable = TestPresets.to_formidable(label='presets')
819819
form_class = formidable.get_django_form_class()
820-
form = form_class(data={'left': 42, 'right': 42})
820+
form = form_class(data={'left': 42.1, 'right': 42.1})
821821
self.assertTrue(form.is_valid())
822-
form = form_class(data={'left': 42, 'right': "42"})
822+
form = form_class(data={'left': 42.1, 'right': "42.1"})
823823
self.assertTrue(form.is_valid())
824-
form = form_class(data={'left': 42, 'right': 21})
824+
form = form_class(data={'left': 42.1, 'right': 21})
825825
self.assertFalse(form.is_valid())
826-
form = form_class(data={'left': 42, 'right': "21"})
826+
form = form_class(data={'left': 42.1, 'right': "21"})
827827
self.assertFalse(form.is_valid())
828828

829829
def test_confirmation_value(self):
830830
class TestPresets(FormidableForm):
831-
number = fields.IntegerField()
831+
number = fields.NumberField()
832832

833833
class Meta:
834834
presets = [
835835
ConfirmationPresets(
836836
[PresetArg(slug='left', field_id='number'),
837837
PresetArg(slug='right', value='42')],
838+
message='{left} is not equal to {right}'
838839
),
839840
]
840841

841842
formidable = TestPresets.to_formidable(label='presets')
842843
form_class = formidable.get_django_form_class()
843-
form = form_class(data={'number': 33})
844+
form = form_class(data={'number': '33'})
844845
self.assertFalse(form.is_valid())
845846
self.assertEqual(
846847
form.errors,
847848
{'__all__': ['33 is not equal to 42']}
848849
)
849850

850-
form = form_class(data={'number': 42})
851+
form = form_class(data={'number': 42.0})
851852
# 42 should equal 42...
852853
self.assertTrue(form.is_valid(), form.errors)
853854

854855
def test_confirmation_access(self):
855856
class TestPresets(FormidableForm):
856-
number = fields.IntegerField(accesses={
857+
number = fields.NumberField(accesses={
857858
'jedi': HIDDEN,
858859
})
859860

@@ -873,7 +874,7 @@ class Meta:
873874

874875
def test_confirmation_not_required_field(self):
875876
class TestPresets(FormidableForm):
876-
number = fields.IntegerField(accesses={
877+
number = fields.NumberField(accesses={
877878
'jedi': EDITABLE,
878879
})
879880
text = fields.CharField(accesses={
@@ -900,10 +901,10 @@ class Meta:
900901

901902
def test_confirmation_not_required_fields(self):
902903
class TestPresets(FormidableForm):
903-
left = fields.IntegerField(accesses={
904+
left = fields.NumberField(accesses={
904905
'jedi': REQUIRED,
905906
})
906-
right = fields.IntegerField(accesses={
907+
right = fields.NumberField(accesses={
907908
'jedi': REQUIRED,
908909
})
909910

@@ -922,10 +923,10 @@ class Meta:
922923

923924
def test_confirmation_required_fields(self):
924925
class TestPresets(FormidableForm):
925-
left = fields.IntegerField(accesses={
926+
left = fields.NumberField(accesses={
926927
'jedi': REQUIRED,
927928
})
928-
right = fields.IntegerField(accesses={
929+
right = fields.NumberField(accesses={
929930
'jedi': REQUIRED,
930931
})
931932

demo/tests/test_from_form.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ def test_gt_validator(self):
9595

9696
class MyForm(FormidableForm):
9797

98-
mynumber = fields.IntegerField(
98+
mynumber = fields.NumberField(
9999
label='number', validators=[validators.GTValidator(5)]
100100
)
101101

@@ -112,7 +112,7 @@ def test_lt_validator(self):
112112

113113
class MyForm(FormidableForm):
114114

115-
mynumber = fields.IntegerField(
115+
mynumber = fields.NumberField(
116116
label='number', validators=[validators.LTValidator(5)]
117117
)
118118

@@ -129,7 +129,7 @@ def test_gte_validator(self):
129129

130130
class MyForm(FormidableForm):
131131

132-
mynumber = fields.IntegerField(
132+
mynumber = fields.NumberField(
133133
label='number', validators=[validators.GTEValidator(5)]
134134
)
135135

@@ -146,7 +146,7 @@ def test_lte_validator(self):
146146

147147
class MyForm(FormidableForm):
148148

149-
mynumber = fields.IntegerField(
149+
mynumber = fields.NumberField(
150150
label='number', validators=[validators.LTEValidator(5)]
151151
)
152152

@@ -163,7 +163,7 @@ def test_eq_validator(self):
163163

164164
class MyForm(FormidableForm):
165165

166-
mynumber = fields.IntegerField(
166+
mynumber = fields.NumberField(
167167
label='number', validators=[validators.EQValidator(5)]
168168
)
169169

@@ -180,7 +180,7 @@ def test_neq_validator(self):
180180

181181
class MyForm(FormidableForm):
182182

183-
mynumber = fields.IntegerField(
183+
mynumber = fields.NumberField(
184184
label='number', validators=[validators.NEQValidator(5)]
185185
)
186186

@@ -269,10 +269,10 @@ class MyForm(FormidableForm):
269269
slug='mytext', type_id='text', label='My Text'
270270
).exists())
271271

272-
def test_integer_field(self):
272+
def test_number_field(self):
273273

274274
class MyForm(FormidableForm):
275-
number_children = fields.IntegerField(label='Your Children Number')
275+
number_children = fields.NumberField(label='Your Children Number')
276276

277277
initial_count = Formidable.objects.count()
278278
form = MyForm.to_formidable(label='tutu')

demo/tests/tests_integration.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ class MyTestForm(FormidableForm):
6161
weapons = fields.ChoiceField(choices=[
6262
('gun', 'blaster'), ('sword', 'light saber')
6363
])
64-
salary = fields.IntegerField(
64+
salary = fields.NumberField(
6565
validators=[
6666
validators.GTValidator(0), validators.LTEValidator(25)
6767
],

formidable/forms/field_builder.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -160,9 +160,9 @@ class DateFieldBuilder(FieldBuilder):
160160
validator_factory_class = DateValidatorFactory
161161

162162

163-
class IntegerFieldBuilder(FieldBuilder):
163+
class NumberFieldBuilder(FieldBuilder):
164164

165-
field_class = forms.IntegerField
165+
field_class = forms.DecimalField
166166

167167

168168
class ChoiceFieldBuilder(FieldBuilder):
@@ -216,7 +216,7 @@ class FormFieldFactory(object):
216216
'checkboxes': CheckboxesFieldBuilder,
217217
'email': EmailFieldBuilder,
218218
'date': DateFieldBuilder,
219-
'number': IntegerFieldBuilder,
219+
'number': NumberFieldBuilder,
220220
'help_text': HelpTextBuilder,
221221
'title': TitleFielBuilder,
222222
'separator': SeparatorBuilder,

formidable/forms/field_builder_from_schema.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,9 @@ class EmailFieldBuilder(FieldBuilder):
9090
field_class = forms.EmailField
9191

9292

93-
class IntegerFieldBuilder(FieldBuilder):
93+
class NumberFieldBuilder(FieldBuilder):
9494

95-
field_class = forms.IntegerField
95+
field_class = forms.DecimalField
9696

9797

9898
class FileFieldBuilder(FieldBuilder):
@@ -154,7 +154,7 @@ class FormFieldFactory(BaseFormFieldFactory):
154154
'checkbox': CheckboxFieldBuilder,
155155
'checkboxes': CheckboxesFieldBuilder,
156156
'email': EmailFieldBuilder,
157-
'number': IntegerFieldBuilder,
157+
'number': NumberFieldBuilder,
158158
'file': FileFieldBuilder,
159159
'date': DateFieldBuilder,
160160
'dropdown': DropdownFieldBuilder,

formidable/forms/fields.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
.. autoclass:: BooleanField
1212
:members:
1313
14-
.. autoclass:: IntegerField
14+
.. autoclass:: NumberField
1515
:members:
1616
1717
.. autoclass:: FileField
@@ -198,7 +198,7 @@ class DateField(Field, fields.DateField):
198198
widget = widgets.DateInput
199199

200200

201-
class IntegerField(Field, fields.IntegerField):
201+
class NumberField(Field, fields.DecimalField):
202202

203203
widget = widgets.NumberInput
204204

0 commit comments

Comments
 (0)