diff options
| author | Jacob Kaplan-Moss <jacob@jacobian.org> | 2008-08-29 16:09:29 +0000 |
|---|---|---|
| committer | Jacob Kaplan-Moss <jacob@jacobian.org> | 2008-08-29 16:09:29 +0000 |
| commit | 21928f2ba01c5411c57720eec82f7ad8658ed733 (patch) | |
| tree | 131a4a26ff5b13545ab6491c9b6724e755a6e273 | |
| parent | 89ccbabbfc0964886076fb3ef768a6e57d88e512 (diff) | |
Fixed #7738: support initial values via `GET` for `SelectMutliple` in the admin.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@8699 bcc190cf-cafb-0310-a4f2-bffc1f526a37
| -rw-r--r-- | django/contrib/admin/options.py | 12 | ||||
| -rw-r--r-- | tests/regressiontests/admin_views/tests.py | 8 |
2 files changed, 19 insertions, 1 deletions
diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py index 696dd30387..9eaa9e5851 100644 --- a/django/contrib/admin/options.py +++ b/django/contrib/admin/options.py @@ -503,7 +503,17 @@ class ModelAdmin(BaseModelAdmin): self.log_addition(request, new_object) return self.response_add(request, new_object) else: - form = ModelForm(initial=dict(request.GET.items())) + # Prepare the dict of initial data from the request. + # We have to special-case M2Ms as a list of comma-separated PKs. + initial = dict(request.GET.items()) + for k in initial: + try: + f = opts.get_field(k) + except FieldDoesNotExist: + pass + if isinstance(f, models.ManyToManyField): + initial[k] = initial[k].split(",") + form = ModelForm(initial=initial) for FormSet in self.get_formsets(request): formset = FormSet(instance=self.model()) formsets.append(formset) diff --git a/tests/regressiontests/admin_views/tests.py b/tests/regressiontests/admin_views/tests.py index c0cc94599d..d16889f45a 100644 --- a/tests/regressiontests/admin_views/tests.py +++ b/tests/regressiontests/admin_views/tests.py @@ -36,6 +36,14 @@ class AdminViewBasicTest(TestCase): response = self.client.get('/test_admin/admin/admin_views/section/add/') self.failUnlessEqual(response.status_code, 200) + def testAddWithGETArgs(self): + response = self.client.get('/test_admin/admin/admin_views/section/add/', {'name': 'My Section'}) + self.failUnlessEqual(response.status_code, 200) + self.failUnless( + 'value="My Section"' in response.content, + "Couldn't find an input with the right value in the response." + ) + def testBasicEditGet(self): """ A smoke test to ensureGET on the change_view works. |
