Skip to content

Commit d1822ec

Browse files
committed
Made field mapping use mix/max kwargs for DurationField validators.
1 parent a4c9e4c commit d1822ec

File tree

2 files changed

+24
-3
lines changed

2 files changed

+24
-3
lines changed

rest_framework/utils/field_mapping.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from rest_framework.validators import UniqueValidator
1313

1414
NUMERIC_FIELD_TYPES = (
15-
models.IntegerField, models.FloatField, models.DecimalField
15+
models.IntegerField, models.FloatField, models.DecimalField, models.DurationField,
1616
)
1717

1818

tests/test_model_serializer.py

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
"""
88
from __future__ import unicode_literals
99

10+
import datetime
1011
import decimal
1112
from collections import OrderedDict
1213

@@ -16,7 +17,6 @@
1617
MaxValueValidator, MinLengthValidator, MinValueValidator
1718
)
1819
from django.db import models
19-
from django.db.models import DurationField as ModelDurationField
2020
from django.test import TestCase
2121
from django.utils import six
2222

@@ -349,7 +349,7 @@ class DurationFieldModel(models.Model):
349349
"""
350350
A model that defines DurationField.
351351
"""
352-
duration_field = ModelDurationField()
352+
duration_field = models.DurationField()
353353

354354
class TestSerializer(serializers.ModelSerializer):
355355
class Meta:
@@ -363,6 +363,27 @@ class Meta:
363363
""")
364364
self.assertEqual(unicode_repr(TestSerializer()), expected)
365365

366+
def test_duration_field_with_validators(self):
367+
class ValidatedDurationFieldModel(models.Model):
368+
"""
369+
A model that defines DurationField with validators.
370+
"""
371+
duration_field = models.DurationField(
372+
validators=[MinValueValidator(datetime.timedelta(days=1)), MaxValueValidator(datetime.timedelta(days=3))]
373+
)
374+
375+
class TestSerializer(serializers.ModelSerializer):
376+
class Meta:
377+
model = ValidatedDurationFieldModel
378+
fields = '__all__'
379+
380+
expected = dedent("""
381+
TestSerializer():
382+
id = IntegerField(label='ID', read_only=True)
383+
duration_field = DurationField(max_value=datetime.timedelta(3), min_value=datetime.timedelta(1))
384+
""")
385+
self.assertEqual(unicode_repr(TestSerializer()), expected)
386+
366387

367388
class TestGenericIPAddressFieldValidation(TestCase):
368389
def test_ip_address_validation(self):

0 commit comments

Comments
 (0)