diff options
| author | Jacob Kaplan-Moss <jacob@jacobian.org> | 2009-03-17 20:51:47 +0000 |
|---|---|---|
| committer | Jacob Kaplan-Moss <jacob@jacobian.org> | 2009-03-17 20:51:47 +0000 |
| commit | 7bc0878922d9d93ab8f4ef8a5c5ba7a1c671279f (patch) | |
| tree | b7fe40fd4a316fea577f140bb3357a9b4f5274a1 /tests/regressiontests/admin_views | |
| parent | a7d1c73ad9eca3010768153e3e71453dbe32267a (diff) | |
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
Diffstat (limited to 'tests/regressiontests/admin_views')
| -rw-r--r-- | tests/regressiontests/admin_views/fixtures/admin-views-person.xml | 18 | ||||
| -rw-r--r-- | tests/regressiontests/admin_views/models.py | 24 | ||||
| -rw-r--r-- | tests/regressiontests/admin_views/tests.py | 72 |
3 files changed, 113 insertions, 1 deletions
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 @@ +<?xml version="1.0" encoding="utf-8"?> +<django-objects version="1.0"> + <object pk="1" model="admin_views.person"> + <field type="CharField" name="name">John Mauchly</field> + <field type="IntegerField" name="gender">1</field> + <field type="BooleanField" name="alive">True</field> + </object> + <object pk="2" model="admin_views.person"> + <field type="CharField" name="name">Grace Hooper</field> + <field type="IntegerField" name="gender">1</field> + <field type="BooleanField" name="alive">False</field> + </object> + <object pk="3" model="admin_views.person"> + <field type="CharField" name="name">Guido van Rossum</field> + <field type="IntegerField" name="gender">1</field> + <field type="BooleanField" name="alive">True</field> + </object> +</django-objects> 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("<input"), 11) + # 1 select per object = 3 selects + self.failUnlessEqual(response.content.count("<select"), 3) + + def test_post_submission(self): + data = { + "form-TOTAL_FORMS": "3", + "form-INITIAL_FORMS": "3", + + "form-0-gender": "1", + "form-0-id": "1", + + "form-1-gender": "2", + "form-1-id": "2", + + "form-2-alive": "checked", + "form-2-gender": "1", + "form-2-id": "3", + } + self.client.post('/test_admin/admin/admin_views/person/', data) + + self.failUnlessEqual(Person.objects.get(name="John Mauchly").alive, False) + self.failUnlessEqual(Person.objects.get(name="Grace Hooper").gender, 2) + + # test a filtered page + data = { + "form-TOTAL_FORMS": "2", + "form-INITIAL_FORMS": "2", + + "form-0-id": "1", + "form-0-gender": "1", + "form-0-alive": "checked", + + "form-1-id": "3", + "form-1-gender": "1", + "form-1-alive": "checked", + } + self.client.post('/test_admin/admin/admin_views/person/?gender__exact=1', data) + + self.failUnlessEqual(Person.objects.get(name="John Mauchly").alive, True) + + # test a searched page + data = { + "form-TOTAL_FORMS": "1", + "form-INITIAL_FORMS": "1", + + "form-0-id": "1", + "form-0-gender": "1" + } + self.client.post('/test_admin/admin/admin_views/person/?q=mauchly', data) + + self.failUnlessEqual(Person.objects.get(name="John Mauchly").alive, False) + class AdminInheritedInlinesTest(TestCase): fixtures = ['admin-views-users.xml',] |
