summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Kaplan-Moss <jacob@jacobian.org>2008-08-29 16:09:29 +0000
committerJacob Kaplan-Moss <jacob@jacobian.org>2008-08-29 16:09:29 +0000
commit21928f2ba01c5411c57720eec82f7ad8658ed733 (patch)
tree131a4a26ff5b13545ab6491c9b6724e755a6e273
parent89ccbabbfc0964886076fb3ef768a6e57d88e512 (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.py12
-rw-r--r--tests/regressiontests/admin_views/tests.py8
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.