From 7bc0878922d9d93ab8f4ef8a5c5ba7a1c671279f Mon Sep 17 00:00:00 2001 From: Jacob Kaplan-Moss Date: Tue, 17 Mar 2009 20:51:47 +0000 Subject: Fixed #8939: added a `list_editable` option to `ModelAdmin`; fields declared `list_editable` may be edited, in bulk, on the changelist page. Thanks, Alex Gaynor. git-svn-id: http://code.djangoproject.com/svn/django/trunk@10077 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- .../admin_views/fixtures/admin-views-person.xml | 18 ++++++ tests/regressiontests/admin_views/models.py | 24 ++++++++ tests/regressiontests/admin_views/tests.py | 72 +++++++++++++++++++++- 3 files changed, 113 insertions(+), 1 deletion(-) create mode 100644 tests/regressiontests/admin_views/fixtures/admin-views-person.xml (limited to 'tests') diff --git a/tests/regressiontests/admin_views/fixtures/admin-views-person.xml b/tests/regressiontests/admin_views/fixtures/admin-views-person.xml new file mode 100644 index 0000000000..77928a834b --- /dev/null +++ b/tests/regressiontests/admin_views/fixtures/admin-views-person.xml @@ -0,0 +1,18 @@ + + + + John Mauchly + 1 + True + + + Grace Hooper + 1 + False + + + Guido van Rossum + 1 + True + + diff --git a/tests/regressiontests/admin_views/models.py b/tests/regressiontests/admin_views/models.py index d849a7b9c1..eeaf039444 100644 --- a/tests/regressiontests/admin_views/models.py +++ b/tests/regressiontests/admin_views/models.py @@ -134,6 +134,28 @@ class Thing(models.Model): class ThingAdmin(admin.ModelAdmin): list_filter = ('color',) +class Person(models.Model): + GENDER_CHOICES = ( + (1, "Male"), + (2, "Female"), + ) + name = models.CharField(max_length=100) + gender = models.IntegerField(choices=GENDER_CHOICES) + alive = models.BooleanField() + + def __unicode__(self): + return self.name + + class Meta: + ordering = ["id"] + +class PersonAdmin(admin.ModelAdmin): + list_display = ('name', 'gender', 'alive') + list_editable = ('gender', 'alive') + list_filter = ('gender',) + search_fields = ('name',) + ordering = ["id"] + class Persona(models.Model): """ A simple persona associated with accounts, to test inlining of related @@ -177,12 +199,14 @@ class PersonaAdmin(admin.ModelAdmin): BarAccountAdmin ) + admin.site.register(Article, ArticleAdmin) admin.site.register(CustomArticle, CustomArticleAdmin) admin.site.register(Section, inlines=[ArticleInline]) admin.site.register(ModelWithStringPrimaryKey) admin.site.register(Color) admin.site.register(Thing, ThingAdmin) +admin.site.register(Person, PersonAdmin) admin.site.register(Persona, PersonaAdmin) # We intentionally register Promo and ChapterXtra1 but not Chapter nor ChapterXtra2. diff --git a/tests/regressiontests/admin_views/tests.py b/tests/regressiontests/admin_views/tests.py index bf198bc9a2..33000d4f5a 100644 --- a/tests/regressiontests/admin_views/tests.py +++ b/tests/regressiontests/admin_views/tests.py @@ -11,7 +11,7 @@ from django.contrib.admin.util import quote from django.utils.html import escape # local test models -from models import Article, CustomArticle, Section, ModelWithStringPrimaryKey, Persona, FooAccount, BarAccount +from models import Article, CustomArticle, Section, ModelWithStringPrimaryKey, Person, Persona, FooAccount, BarAccount try: set @@ -729,6 +729,76 @@ class AdminViewUnicodeTest(TestCase): response = self.client.post('/test_admin/admin/admin_views/book/1/delete/', delete_dict) self.assertRedirects(response, '/test_admin/admin/admin_views/book/') + +class AdminViewListEditable(TestCase): + fixtures = ['admin-views-users.xml', 'admin-views-person.xml'] + + def setUp(self): + self.client.login(username='super', password='secret') + + def tearDown(self): + self.client.logout() + + def test_changelist_input_html(self): + response = self.client.get('/test_admin/admin/admin_views/person/') + # 2 inputs per object(the field and the hidden id field) = 6 + # 2 management hidden fields = 2 + # main form submit button = 1 + # search field and search submit button = 2 + # 6 + 2 + 1 + 2 = 11 inputs + self.failUnlessEqual(response.content.count("