diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py index 7986a4284a..7a4c15c3c1 100644 --- a/django/db/models/fields/__init__.py +++ b/django/db/models/fields/__init__.py @@ -912,11 +912,21 @@ class PhoneNumberField(IntegerField): class PositiveIntegerField(IntegerField): def get_manipulator_field_objs(self): return [oldforms.PositiveIntegerField] + + def formfield(self, **kwargs): + defaults = {'min_value': 0} + defaults.update(kwargs) + return super(PositiveIntegerField, self).formfield(**defaults) class PositiveSmallIntegerField(IntegerField): def get_manipulator_field_objs(self): return [oldforms.PositiveSmallIntegerField] + def formfield(self, **kwargs): + defaults = {'min_value': 0} + defaults.update(kwargs) + return super(PositiveSmallIntegerField, self).formfield(**defaults) + class SlugField(CharField): def __init__(self, *args, **kwargs): kwargs['max_length'] = kwargs.get('max_length', 50) diff --git a/tests/regressiontests/forms/models.py b/tests/regressiontests/forms/models.py index e69de29bb2..f4f8607193 100644 --- a/tests/regressiontests/forms/models.py +++ b/tests/regressiontests/forms/models.py @@ -0,0 +1,21 @@ +from django.db import models + +class BoundaryModel(models.Model): + positive_integer = models.PositiveIntegerField(null=True, blank=True) + +__test__ = {'API_TESTS': """ +>>> from django.newforms import form_for_model + +# Boundary conditions on a PostitiveIntegerField ######################### +>>> BoundaryForm = form_for_model(BoundaryModel) +>>> f = BoundaryForm({'positive_integer':100}) +>>> f.is_valid() +True +>>> f = BoundaryForm({'positive_integer':0}) +>>> f.is_valid() +True +>>> f = BoundaryForm({'positive_integer':-100}) +>>> f.is_valid() +False + +"""} \ No newline at end of file