summaryrefslogtreecommitdiff
path: root/tests/regressiontests/admin_views
diff options
context:
space:
mode:
authorJannis Leidel <jannis@leidel.info>2011-04-22 12:02:25 +0000
committerJannis Leidel <jannis@leidel.info>2011-04-22 12:02:25 +0000
commit6c17190bf8c6c23f21dd49b029106dd5cb41ae2e (patch)
tree0f420c0001378af13ddd7e063f144fc6a30f3701 /tests/regressiontests/admin_views
parent51cfd7a50b82e5151ba96a0f81220288c2a17546 (diff)
Fixed #11639, #13618 -- Added get_prepopulated_fields method to ModelAdmin and InlineModelAdmin to be able to handle prepopulated fields on a case-by-case basis. Thanks, leanmeandonothingmachine.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@16069 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests/regressiontests/admin_views')
-rw-r--r--tests/regressiontests/admin_views/fixtures/admin-views-users.xml9
-rw-r--r--tests/regressiontests/admin_views/models.py46
-rw-r--r--tests/regressiontests/admin_views/tests.py24
3 files changed, 76 insertions, 3 deletions
diff --git a/tests/regressiontests/admin_views/fixtures/admin-views-users.xml b/tests/regressiontests/admin_views/fixtures/admin-views-users.xml
index f1ff2961a1..1c85e1c909 100644
--- a/tests/regressiontests/admin_views/fixtures/admin-views-users.xml
+++ b/tests/regressiontests/admin_views/fixtures/admin-views-users.xml
@@ -88,6 +88,9 @@
<field type="DateTimeField" name="date">2009-03-18 11:54:58</field>
<field to="admin_views.section" name="section" rel="ManyToOneRel">1</field>
</object>
-
-
-</django-objects> \ No newline at end of file
+ <object pk="1" model="admin_views.prepopulatedpost">
+ <field type="TextField" name="title">A Long Title</field>
+ <field type="BooleanField" name="published">True</field>
+ <field type="SlugField" name="slug">a-long-title</field>
+ </object>
+</django-objects>
diff --git a/tests/regressiontests/admin_views/models.py b/tests/regressiontests/admin_views/models.py
index b65f8a4b37..97f6708e40 100644
--- a/tests/regressiontests/admin_views/models.py
+++ b/tests/regressiontests/admin_views/models.py
@@ -529,6 +529,51 @@ class LinkInline(admin.TabularInline):
readonly_fields = ("posted",)
+class PrePopulatedPost(models.Model):
+ title = models.CharField(max_length=100)
+ published = models.BooleanField()
+ slug = models.SlugField()
+
+class PrePopulatedSubPost(models.Model):
+ post = models.ForeignKey(PrePopulatedPost)
+ subtitle = models.CharField(max_length=100)
+ subslug = models.SlugField()
+
+class SubPostInline(admin.TabularInline):
+ model = PrePopulatedSubPost
+
+ prepopulated_fields = {
+ 'subslug' : ('subtitle',)
+ }
+
+ def get_readonly_fields(self, request, obj=None):
+ if obj and obj.published:
+ return ('subslug',)
+ return self.readonly_fields
+
+ def get_prepopulated_fields(self, request, obj=None):
+ if obj and obj.published:
+ return {}
+ return self.prepopulated_fields
+
+class PrePopulatedPostAdmin(admin.ModelAdmin):
+ list_display = ['title', 'slug']
+ prepopulated_fields = {
+ 'slug' : ('title',)
+ }
+
+ inlines = [SubPostInline]
+
+ def get_readonly_fields(self, request, obj=None):
+ if obj and obj.published:
+ return ('slug',)
+ return self.readonly_fields
+
+ def get_prepopulated_fields(self, request, obj=None):
+ if obj and obj.published:
+ return {}
+ return self.prepopulated_fields
+
class Post(models.Model):
title = models.CharField(max_length=100, help_text="Some help text for the title (with unicode ŠĐĆŽćžšđ)")
content = models.TextField(help_text="Some help text for the content (with unicode ŠĐĆŽćžšđ)")
@@ -818,3 +863,4 @@ admin.site.register(Topping)
admin.site.register(Album, AlbumAdmin)
admin.site.register(Question)
admin.site.register(Answer)
+admin.site.register(PrePopulatedPost, PrePopulatedPostAdmin)
diff --git a/tests/regressiontests/admin_views/tests.py b/tests/regressiontests/admin_views/tests.py
index e3727a849d..9b1a73803f 100644
--- a/tests/regressiontests/admin_views/tests.py
+++ b/tests/regressiontests/admin_views/tests.py
@@ -2579,6 +2579,30 @@ class NeverCacheTests(TestCase):
self.assertEqual(get_max_age(response), None)
+class PrePopulatedTest(TestCase):
+ fixtures = ['admin-views-users.xml']
+
+ def setUp(self):
+ self.client.login(username='super', password='secret')
+
+ def tearDown(self):
+ self.client.logout()
+
+ def test_prepopulated_on(self):
+ response = self.client.get('/test_admin/admin/admin_views/prepopulatedpost/add/')
+ self.assertEqual(response.status_code, 200)
+ self.assertContains(response, "id: '#id_slug',")
+ self.assertContains(response, "field['dependency_ids'].push('#id_title');")
+ self.assertContains(response, "id: '#id_prepopulatedsubpost_set-0-subslug',")
+
+ def test_prepopulated_off(self):
+ response = self.client.get('/test_admin/admin/admin_views/prepopulatedpost/1/')
+ self.assertEqual(response.status_code, 200)
+ self.assertContains(response, "A Long Title")
+ self.assertNotContains(response, "id: '#id_slug'")
+ self.assertNotContains(response, "field['dependency_ids'].push('#id_title');")
+ self.assertNotContains(response, "id: '#id_prepopulatedsubpost_set-0-subslug',")
+
class ReadonlyTest(TestCase):
fixtures = ['admin-views-users.xml']