From c7291fd0afe7c6b42f205a44f84b97151abf9a52 Mon Sep 17 00:00:00 2001
From: Sebastian Noack <sebastian.noack@gmail.com>
Date: Thu, 15 May 2008 16:18:23 +0200
Subject: [PATCH] Fixed widget handling in ModelChoicesField.__init__ and ModelMultipleChoicesField.__init__ (#7244).

---
 django/newforms/models.py |   16 +++++++++++-----
 1 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/django/newforms/models.py b/django/newforms/models.py
index 78a2041..d6451ee 100644
--- a/django/newforms/models.py
+++ b/django/newforms/models.py
@@ -13,7 +13,7 @@ from django.core.exceptions import ImproperlyConfigured
 from util import ValidationError, ErrorList
 from forms import BaseForm, get_declared_fields
 from fields import Field, ChoiceField, EMPTY_VALUES
-from widgets import Select, SelectMultiple, MultipleHiddenInput
+from widgets import MultipleHiddenInput
 
 __all__ = (
     'ModelForm', 'BaseModelForm', 'model_to_dict', 'fields_for_model',
@@ -301,7 +301,7 @@ class ModelChoiceField(ChoiceField):
     }
 
     def __init__(self, queryset, empty_label=u"---------", cache_choices=False,
-                 required=True, widget=Select, label=None, initial=None,
+                 required=True, widget=None, label=None, initial=None,
                  help_text=None, *args, **kwargs):
         self.empty_label = empty_label
         self.cache_choices = cache_choices
@@ -346,7 +346,13 @@ class ModelChoiceField(ChoiceField):
         # the queryset.
         return ModelChoiceIterator(self)
 
-    choices = property(_get_choices, ChoiceField._set_choices)
+    def _set_choices(self, value):
+        # This method is copied from ChoiceField._set_choices(). It's necessary
+        # because property() doesn't allow a subclass to overwrite only
+        # _get_choices without implementing _set_choices.
+        self._choices = self.widget.choices = list(value)
+
+    choices = property(_get_choices, _set_choices)
 
     def clean(self, value):
         Field.clean(self, value)
@@ -368,8 +374,8 @@ class ModelMultipleChoiceField(ModelChoiceField):
     }
 
     def __init__(self, queryset, cache_choices=False, required=True,
-                 widget=SelectMultiple, label=None, initial=None,
-                 help_text=None, *args, **kwargs):
+                 widget=None, label=None, initial=None, help_text=None,
+                 *args, **kwargs):
         super(ModelMultipleChoiceField, self).__init__(queryset, None,
             cache_choices, required, widget, label, initial, help_text,
             *args, **kwargs)
-- 
1.5.3.7

