Index: tests/modeltests/model_forms/models.py
===================================================================
--- tests/modeltests/model_forms/models.py	(revision 8761)
+++ tests/modeltests/model_forms/models.py	(working copy)
@@ -27,6 +27,12 @@
     (3, 'Live'),
 )
 
+ARTICLE_STATUS_CHAR = (
+    ('d', 'Draft'),
+    ('p', 'Pending'),
+    ('l', 'Live'),
+)
+
 class Category(models.Model):
     name = models.CharField(max_length=20)
     slug = models.SlugField(max_length=20)
@@ -111,6 +117,9 @@
     def __unicode__(self):
         return self.field
 
+class ArticleStatus(models.Model):
+    status = models.CharField(max_length=2, choices=ARTICLE_STATUS_CHAR, blank=True, null=True)
+
 __test__ = {'API_TESTS': """
 >>> from django import forms
 >>> from django.forms.models import ModelForm, model_to_dict
@@ -1123,4 +1132,24 @@
 >>> f.clean('1')
 u'1'
 
+# Choices on CharField and IntegerField
+
+>>> class ArticleForm(ModelForm):
+...     class Meta:
+...         model = Article
+>>> f = ArticleForm()
+>>> f.fields['status'].clean('42')
+Traceback (most recent call last):
+...
+ValidationError: [u'Select a valid choice. 42 is not one of the available choices.']
+
+>>> class ArticleStatusForm(ModelForm):
+...     class Meta:
+...         model = ArticleStatus
+>>> f = ArticleStatusForm()
+>>> f.fields['status'].clean('z')
+Traceback (most recent call last):
+...
+ValidationError: [u'Select a valid choice. z is not one of the available choices.']
+
 """}
