diff options
| author | Jannis Leidel <jannis@leidel.info> | 2011-04-22 12:02:25 +0000 |
|---|---|---|
| committer | Jannis Leidel <jannis@leidel.info> | 2011-04-22 12:02:25 +0000 |
| commit | 6c17190bf8c6c23f21dd49b029106dd5cb41ae2e (patch) | |
| tree | 0f420c0001378af13ddd7e063f144fc6a30f3701 /tests/regressiontests/admin_views | |
| parent | 51cfd7a50b82e5151ba96a0f81220288c2a17546 (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.xml | 9 | ||||
| -rw-r--r-- | tests/regressiontests/admin_views/models.py | 46 | ||||
| -rw-r--r-- | tests/regressiontests/admin_views/tests.py | 24 |
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'] |
