Skip to content

Commit e32736d

Browse files
committed
Made field mapping use mix/max kwargs for DurationField validators.
1 parent 96ce8ea commit e32736d

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

@@ -347,7 +347,7 @@ class DurationFieldModel(models.Model):
347347
"""
348348
A model that defines DurationField.
349349
"""
350-
duration_field = ModelDurationField()
350+
duration_field = models.DurationField()
351351

352352
class TestSerializer(serializers.ModelSerializer):
353353
class Meta:
@@ -361,6 +361,27 @@ class Meta:
361361
""")
362362
self.assertEqual(unicode_repr(TestSerializer()), expected)
363363

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

365386
class TestGenericIPAddressFieldValidation(TestCase):
366387
def test_ip_address_validation(self):

0 commit comments

Comments
 (0)