From 9687447e3139d0f80619900c4f08d763ca8b0aa2 Mon Sep 17 00:00:00 2001 From: Joseph Kocherhans Date: Tue, 25 Sep 2007 01:51:22 +0000 Subject: [PATCH] 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 --- django/contrib/admin/widgets.py | 11 +++++++---- django/newforms/models.py | 8 +++++++- 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):