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
This commit is contained in:
Jacob Kaplan-Moss 2008-08-29 16:09:29 +00:00
parent 89ccbabbfc
commit 21928f2ba0
2 changed files with 19 additions and 1 deletions

View File

@ -503,7 +503,17 @@ class ModelAdmin(BaseModelAdmin):
self.log_addition(request, new_object) self.log_addition(request, new_object)
return self.response_add(request, new_object) return self.response_add(request, new_object)
else: 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): for FormSet in self.get_formsets(request):
formset = FormSet(instance=self.model()) formset = FormSet(instance=self.model())
formsets.append(formset) formsets.append(formset)

View File

@ -36,6 +36,14 @@ class AdminViewBasicTest(TestCase):
response = self.client.get('/test_admin/admin/admin_views/section/add/') response = self.client.get('/test_admin/admin/admin_views/section/add/')
self.failUnlessEqual(response.status_code, 200) 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): def testBasicEditGet(self):
""" """
A smoke test to ensureGET on the change_view works. A smoke test to ensureGET on the change_view works.