Skip to content

Commit dceb686

Browse files
committed
Merge pull request #3774 from tomchristie/decimalfield_validators
Min/MaxValueValidator is no longer transferred from a model's DecimalField
2 parents 060444d + a772326 commit dceb686

File tree

2 files changed

+23
-13
lines changed

2 files changed

+23
-13
lines changed

rest_framework/utils/field_mapping.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,10 +130,10 @@ def get_field_kwargs(field_name, model_field):
130130

131131
# Our decimal validation is handled in the field code, not validator code.
132132
# (In Django 1.9+ this differs from previous style)
133-
if isinstance(model_field, models.DecimalField):
133+
if isinstance(model_field, models.DecimalField) and DecimalValidator:
134134
validator_kwarg = [
135135
validator for validator in validator_kwarg
136-
if DecimalValidator and not isinstance(validator, DecimalValidator)
136+
if not isinstance(validator, DecimalValidator)
137137
]
138138

139139
# Ensure that max_length is passed explicitly as a keyword arg,

tests/test_model_serializer.py

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
from rest_framework import serializers
2424
from rest_framework.compat import DurationField as ModelDurationField
25-
from rest_framework.compat import DecimalValidator, unicode_repr
25+
from rest_framework.compat import unicode_repr
2626

2727

2828
def dedent(blocktext):
@@ -872,30 +872,40 @@ class DecimalFieldModel(models.Model):
872872

873873

874874
class TestDecimalFieldMappings(TestCase):
875-
@pytest.mark.skipif(DecimalValidator is not None,
876-
reason='DecimalValidator is available in Django 1.9+')
877-
def test_decimal_field_has_no_decimal_validator(self):
875+
def test_decimal_field_has_decimal_validator(self):
878876
"""
879-
Test that a DecimalField has no validators before Django 1.9.
877+
Test that a `DecimalField` has no `DecimalValidator`.
880878
"""
881879
class TestSerializer(serializers.ModelSerializer):
882880
class Meta:
883881
model = DecimalFieldModel
884882

885883
serializer = TestSerializer()
886884

887-
assert len(serializer.fields['decimal_field'].validators) == 0
885+
assert len(serializer.fields['decimal_field'].validators) == 2
888886

889-
@pytest.mark.skipif(DecimalValidator is None,
890-
reason='DecimalValidator is available in Django 1.9+')
891-
def test_decimal_field_has_decimal_validator(self):
887+
def test_min_value_is_passed(self):
892888
"""
893-
Test that a DecimalField has DecimalValidator in Django 1.9+.
889+
Test that the `MinValueValidator` is converted to the `min_value`
890+
argument for the field.
894891
"""
895892
class TestSerializer(serializers.ModelSerializer):
896893
class Meta:
897894
model = DecimalFieldModel
898895

899896
serializer = TestSerializer()
900897

901-
assert len(serializer.fields['decimal_field'].validators) == 2
898+
assert serializer.fields['decimal_field'].min_value == 1
899+
900+
def test_max_value_is_passed(self):
901+
"""
902+
Test that the `MaxValueValidator` is converted to the `max_value`
903+
argument for the field.
904+
"""
905+
class TestSerializer(serializers.ModelSerializer):
906+
class Meta:
907+
model = DecimalFieldModel
908+
909+
serializer = TestSerializer()
910+
911+
assert serializer.fields['decimal_field'].max_value == 3

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy