Index: django/db/models/fields/__init__.py
===================================================================
--- django/db/models/fields/__init__.py	(revision 4447)
+++ django/db/models/fields/__init__.py	(working copy)
@@ -417,9 +417,14 @@
         return str(value)
 
     def formfield(self, **kwargs):
-        defaults = {'max_length': self.maxlength, 'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
+        defaults = {'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
         defaults.update(kwargs)
-        return forms.CharField(**defaults)
+        if len(self.choices) == 0:
+            defaults['max_length'] = self.maxlength
+            return forms.CharField(**defaults)
+        else:
+            defaults['choices'] = self.get_choices()
+            return forms.ChoiceField(**defaults)
 
 # TODO: Maybe move this into contrib, because it's specialized.
 class CommaSeparatedIntegerField(CharField):
