summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Kocherhans <joseph@jkocherhans.com>2007-09-25 01:51:22 +0000
committerJoseph Kocherhans <joseph@jkocherhans.com>2007-09-25 01:51:22 +0000
commit9687447e3139d0f80619900c4f08d763ca8b0aa2 (patch)
tree1643efbc3ede733bafb41bdaa06e8feccbf8a58c
parent609eaf130d2d9eac109aefa59bfced32b67b9eb1 (diff)
newforms-admin: Fixed bug in many-to-many raw_id widget display.
git-svn-id: http://code.djangoproject.com/svn/django/branches/newforms-admin@6418 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/contrib/admin/widgets.py11
-rw-r--r--django/newforms/models.py8
2 files changed, 14 insertions, 5 deletions
diff --git a/django/contrib/admin/widgets.py b/django/contrib/admin/widgets.py
index 492e9d6e6e..e7c95fb219 100644
--- a/django/contrib/admin/widgets.py
+++ b/django/contrib/admin/widgets.py
@@ -101,14 +101,17 @@ class ManyToManyRawIdWidget(ForeignKeyRawIdWidget):
attrs['class'] = 'vManyToManyRawIdAdminField'
if value:
value = ','.join([str(v) for v in value])
- else:
- value = ""
+ else:
+ value = ''
return super(ManyToManyRawIdWidget, self).render(name, value, attrs)
def value_from_datadict(self, data, files, name):
- if isinstance(data, MultiValueDict):
+ value = data.get(name, None)
+ if value and ',' in value:
return data[name].split(',')
- return data.get(name, None)
+ if value:
+ return [value]
+ return None
class RelatedFieldWidgetWrapper(object):
"""
diff --git a/django/newforms/models.py b/django/newforms/models.py
index 4d2b3106c9..5c4dc08882 100644
--- a/django/newforms/models.py
+++ b/django/newforms/models.py
@@ -218,6 +218,8 @@ def initial_data(instance, fields=None):
All field values in the instance will be returned if ``fields`` is not
provided.
"""
+ # avoid a circular import
+ from django.db.models.fields.related import ManyToManyField
model = instance.__class__
opts = model._meta
initial = {}
@@ -226,7 +228,11 @@ def initial_data(instance, fields=None):
continue
if fields and not f.name in fields:
continue
- initial[f.name] = f.value_from_object(instance)
+ if isinstance(f, ManyToManyField):
+ # MultipleChoiceWidget needs a list of ints, not object instances.
+ initial[f.name] = [obj._get_pk_val() for obj in f.value_from_object(instance)]
+ else:
+ initial[f.name] = f.value_from_object(instance)
return initial
class BaseModelFormSet(BaseFormSet):