summaryrefslogtreecommitdiff
path: root/tests/regressiontests/admin_views
diff options
context:
space:
mode:
authorJacob Kaplan-Moss <jacob@jacobian.org>2009-03-17 20:51:47 +0000
committerJacob Kaplan-Moss <jacob@jacobian.org>2009-03-17 20:51:47 +0000
commit7bc0878922d9d93ab8f4ef8a5c5ba7a1c671279f (patch)
treeb7fe40fd4a316fea577f140bb3357a9b4f5274a1 /tests/regressiontests/admin_views
parenta7d1c73ad9eca3010768153e3e71453dbe32267a (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.xml18
-rw-r--r--tests/regressiontests/admin_views/models.py24
-rw-r--r--tests/regressiontests/admin_views/tests.py72
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',]