diff options
| author | Tom Christie | 2013-05-18 08:56:24 -0700 | 
|---|---|---|
| committer | Tom Christie | 2013-05-18 08:56:24 -0700 | 
| commit | 6d5cf527c32402436b8300324715779c41f50fd7 (patch) | |
| tree | d6ae9a26eff85dcf00f3486af2db6508f2915dbd /rest_framework | |
| parent | c7fd2435330f094a7ab64f4358d11d6c2967eba1 (diff) | |
| parent | 025c40e7d5efbba0c3e65ab3737adef988995a24 (diff) | |
| download | django-rest-framework-6d5cf527c32402436b8300324715779c41f50fd7.tar.bz2 | |
Merge pull request #864 from minddust/fix_missing_min_values
Fix missing min values
Diffstat (limited to 'rest_framework')
| -rw-r--r-- | rest_framework/serializers.py | 5 | ||||
| -rw-r--r-- | rest_framework/tests/serializer.py | 73 | 
2 files changed, 78 insertions, 0 deletions
diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index ff5eb873..943fba6b 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -744,6 +744,11 @@ class ModelSerializer(Serializer):              kwargs['choices'] = model_field.flatchoices              return ChoiceField(**kwargs) +        # put this below the ChoiceField because min_value isn't a valid initializer +        if issubclass(model_field.__class__, models.PositiveIntegerField) or\ +                issubclass(model_field.__class__, models.PositiveSmallIntegerField): +            kwargs['min_value'] = 0 +          attribute_dict = {              models.CharField: ['max_length'],              models.CommaSeparatedIntegerField: ['max_length'], diff --git a/rest_framework/tests/serializer.py b/rest_framework/tests/serializer.py index 4f188c3e..220a581a 100644 --- a/rest_framework/tests/serializer.py +++ b/rest_framework/tests/serializer.py @@ -1402,3 +1402,76 @@ class AttributeMappingOnAutogeneratedFieldsTests(TestCase):      def test_url_field(self):          self.field_test('url_field') + + +class DefaultValuesOnAutogeneratedFieldsTests(TestCase): + +    def setUp(self): +        class DVOAFModel(RESTFrameworkModel): +            positive_integer_field = models.PositiveIntegerField(blank=True) +            positive_small_integer_field = models.PositiveSmallIntegerField(blank=True) +            email_field = models.EmailField(blank=True) +            file_field = models.FileField(blank=True) +            image_field = models.ImageField(blank=True) +            slug_field = models.SlugField(blank=True) +            url_field = models.URLField(blank=True) + +        class DVOAFSerializer(serializers.ModelSerializer): +            class Meta: +                model = DVOAFModel + +        self.serializer_class = DVOAFSerializer +        self.fields_attributes = { +            'positive_integer_field': [ +                ('min_value', 0), +            ], +            'positive_small_integer_field': [ +                ('min_value', 0), +            ], +            'email_field': [ +                ('max_length', 75), +            ], +            'file_field': [ +                ('max_length', 100), +            ], +            'image_field': [ +                ('max_length', 100), +            ], +            'slug_field': [ +                ('max_length', 50), +            ], +            'url_field': [ +                ('max_length', 200), +            ], +        } + +    def field_test(self, field): +        serializer = self.serializer_class(data={}) +        self.assertEqual(serializer.is_valid(), True) + +        for attribute in self.fields_attributes[field]: +            self.assertEqual( +                getattr(serializer.fields[field], attribute[0]), +                attribute[1] +            ) + +    def test_positive_integer_field(self): +        self.field_test('positive_integer_field') + +    def test_positive_small_integer_field(self): +        self.field_test('positive_small_integer_field') + +    def test_email_field(self): +        self.field_test('email_field') + +    def test_file_field(self): +        self.field_test('file_field') + +    def test_image_field(self): +        self.field_test('image_field') + +    def test_slug_field(self): +        self.field_test('slug_field') + +    def test_url_field(self): +        self.field_test('url_field')  | 
