Index: django/db/models/fields/__init__.py
===================================================================
--- django/db/models/fields/__init__.py	(revision 4864)
+++ django/db/models/fields/__init__.py	(working copy)
@@ -344,6 +344,8 @@
     def formfield(self, **kwargs):
         "Returns a django.newforms.Field instance for this database Field."
         defaults = {'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
+        if self.choices:
+            defaults.update({'widget': forms.Select(choices=self.get_choices())})
         defaults.update(kwargs)
         return forms.CharField(**defaults)
 
@@ -406,6 +408,8 @@
 
     def formfield(self, **kwargs):
         defaults = {'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
+        if self.choices:
+            defaults.update({'widget': forms.Select(choices=self.get_choices())})
         defaults.update(kwargs)
         return forms.BooleanField(**defaults)
 
@@ -425,6 +429,8 @@
 
     def formfield(self, **kwargs):
         defaults = {'max_length': self.maxlength, 'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
+        if self.choices:
+            defaults.update({'widget': forms.Select(choices=self.get_choices())})
         defaults.update(kwargs)
         return forms.CharField(**defaults)
 
@@ -503,6 +509,8 @@
 
     def formfield(self, **kwargs):
         defaults = {'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
+        if self.choices:
+            defaults.update({'widget': forms.Select(choices=self.get_choices())})
         defaults.update(kwargs)
         return forms.DateField(**defaults)
 
@@ -568,6 +576,8 @@
 
     def formfield(self, **kwargs):
         defaults = {'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
+        if self.choices:
+            defaults.update({'widget': forms.Select(choices=self.get_choices())})
         defaults.update(kwargs)
         return forms.DateTimeField(**defaults)
 
@@ -587,6 +597,8 @@
 
     def formfield(self, **kwargs):
         defaults = {'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
+        if self.choices:
+            defaults.update({'widget': forms.Select(choices=self.get_choices())})
         defaults.update(kwargs)
         return forms.EmailField(**defaults)
 
@@ -724,6 +736,8 @@
 
     def formfield(self, **kwargs):
         defaults = {'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
+        if self.choices:
+            defaults.update({'widget': forms.Select(choices=self.get_choices())})
         defaults.update(kwargs)
         return forms.IntegerField(**defaults)
 
@@ -763,6 +777,8 @@
     def formfield(self, **kwargs):
         from django.contrib.localflavor.usa.forms import USPhoneNumberField
         defaults = {'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
+        if self.choices:
+            defaults.update({'widget': forms.Select(choices=self.get_choices())})
         defaults.update(kwargs)
         return USPhoneNumberField(**defaults)
 
@@ -796,6 +812,8 @@
 
     def formfield(self, **kwargs):
         defaults = {'required': not self.blank, 'widget': forms.Textarea, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
+        if self.choices:
+            defaults.update({'widget': forms.Select(choices=self.get_choices())})
         defaults.update(kwargs)
         return forms.CharField(**defaults)
 
@@ -841,6 +859,8 @@
 
     def formfield(self, **kwargs):
         defaults = {'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
+        if self.choices:
+            defaults.update({'widget': forms.Select(choices=self.get_choices())})
         defaults.update(kwargs)
         return forms.TimeField(**defaults)
 
@@ -860,6 +880,8 @@
 
     def formfield(self, **kwargs):
         defaults = {'required': not self.blank, 'verify_exists': self.verify_exists, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
+        if self.choices:
+            defaults.update({'widget': forms.Select(choices=self.get_choices())})
         defaults.update(kwargs)
         return forms.URLField(**defaults)
 
Index: tests/modeltests/model_forms/models.py
===================================================================
--- tests/modeltests/model_forms/models.py	(revision 4864)
+++ tests/modeltests/model_forms/models.py	(working copy)
@@ -24,6 +24,12 @@
 
 from django.db import models
 
+ARTICLE_STATUS_CHOICES = (
+    (1, 'Draft'),
+    (2, 'Pending'),
+    (3, 'Live'),
+)
+
 class Category(models.Model):
     name = models.CharField(maxlength=20)
     url = models.CharField('The URL', maxlength=40)
@@ -44,6 +50,7 @@
     writer = models.ForeignKey(Writer)
     article = models.TextField()
     categories = models.ManyToManyField(Category, blank=True)
+    status = models.IntegerField(blank=True, choices=ARTICLE_STATUS_CHOICES, null=True)
 
     def save(self):
         import datetime
@@ -147,8 +154,8 @@
 >>> w = Writer(name='Bob Woodward')
 >>> w.save()
 
-ManyToManyFields are represented by a MultipleChoiceField, and ForeignKeys are
-represented by a ChoiceField.
+ManyToManyFields are represented by a MultipleChoiceField, ForeignKeys and any
+fields with choices defined are represented by a ChoiceField.
 >>> ArticleForm = form_for_model(Article)
 >>> f = ArticleForm(auto_id=False)
 >>> print f
@@ -160,6 +167,12 @@
 <option value="2">Bob Woodward</option>
 </select></td></tr>
 <tr><th>Article:</th><td><textarea name="article"></textarea></td></tr>
+<tr><th>Status:</th><td><select name="status">
+<option value="" selected="selected">---------</option>
+<option value="1">Draft</option>
+<option value="2">Pending</option>
+<option value="3">Live</option>
+</select></td></tr>
 <tr><th>Categories:</th><td><select multiple="multiple" name="categories">
 <option value="1">Entertainment</option>
 <option value="2">It&#39;s a test</option>
@@ -200,6 +213,12 @@
 <option value="2">Bob Woodward</option>
 </select></li>
 <li>Article: <textarea name="article">Hello.</textarea></li>
+<li>Status: <select name="status">
+<option value="" selected="selected">---------</option>
+<option value="1">Draft</option>
+<option value="2">Pending</option>
+<option value="3">Live</option>
+</select></li>
 <li>Categories: <select multiple="multiple" name="categories">
 <option value="1">Entertainment</option>
 <option value="2">It&#39;s a test</option>
@@ -232,6 +251,12 @@
 <option value="2">Bob Woodward</option>
 </select></li>
 <li>Article: <textarea name="article">Hello.</textarea></li>
+<li>Status: <select name="status">
+<option value="" selected="selected">---------</option>
+<option value="1">Draft</option>
+<option value="2">Pending</option>
+<option value="3">Live</option>
+</select></li>
 <li>Categories: <select multiple="multiple" name="categories">
 <option value="1" selected="selected">Entertainment</option>
 <option value="2">It&#39;s a test</option>
@@ -310,6 +335,12 @@
 <option value="2">Bob Woodward</option>
 </select></li>
 <li>Article: <textarea name="article"></textarea></li>
+<li>Status: <select name="status">
+<option value="" selected="selected">---------</option>
+<option value="1">Draft</option>
+<option value="2">Pending</option>
+<option value="3">Live</option>
+</select></li>
 <li>Categories: <select multiple="multiple" name="categories">
 <option value="1">Entertainment</option>
 <option value="2">It&#39;s a test</option>
@@ -329,6 +360,12 @@
 <option value="3">Carl Bernstein</option>
 </select></li>
 <li>Article: <textarea name="article"></textarea></li>
+<li>Status: <select name="status">
+<option value="" selected="selected">---------</option>
+<option value="1">Draft</option>
+<option value="2">Pending</option>
+<option value="3">Live</option>
+</select></li>
 <li>Categories: <select multiple="multiple" name="categories">
 <option value="1">Entertainment</option>
 <option value="2">It&#39;s a test</option>
