summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Graham <timograham@gmail.com>2015-01-17 18:02:35 -0500
committerTim Graham <timograham@gmail.com>2015-01-17 18:02:35 -0500
commit2c9e95639e5a353f9fe1b81ecd3fdc5e2212781e (patch)
tree563a28bb8b321f8bc57622d591cd7516c8e6879f
parent3b570dbcdb605cc6ee7e8796e1533fdd40c92362 (diff)
Removed ModelAdmin.get_formsets() per deprecation timeline; refs #20702.
-rw-r--r--django/contrib/admin/options.py39
-rw-r--r--docs/ref/contrib/admin/index.txt20
-rw-r--r--tests/generic_inline_admin/tests.py63
3 files changed, 3 insertions, 119 deletions
diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py
index ab10952e3f..42685dc0ed 100644
--- a/django/contrib/admin/options.py
+++ b/django/contrib/admin/options.py
@@ -721,47 +721,12 @@ class ModelAdmin(BaseModelAdmin):
self.get_changelist_form(request), extra=0,
fields=self.list_editable, **defaults)
- def _get_formsets(self, request, obj):
- """
- Helper function that exists to allow the deprecation warning to be
- executed while this function continues to return a generator.
- """
- for inline in self.get_inline_instances(request, obj):
- yield inline.get_formset(request, obj)
-
- def get_formsets(self, request, obj=None):
- warnings.warn(
- "ModelAdmin.get_formsets() is deprecated and will be removed in "
- "Django 1.9. Use ModelAdmin.get_formsets_with_inlines() instead.",
- RemovedInDjango19Warning, stacklevel=2
- )
- return self._get_formsets(request, obj)
-
def get_formsets_with_inlines(self, request, obj=None):
"""
Yields formsets and the corresponding inlines.
"""
- # We call get_formsets() [deprecated] and check if it triggers a
- # warning. If it does, then it's ours and we can safely ignore it, but
- # if it doesn't then it has been overridden so we must warn about the
- # deprecation.
- with warnings.catch_warnings(record=True) as w:
- warnings.simplefilter("always")
- formsets = self.get_formsets(request, obj)
-
- if len(w) != 1 or not issubclass(w[0].category, RemovedInDjango19Warning):
- warnings.warn(
- "ModelAdmin.get_formsets() is deprecated and will be removed in "
- "Django 1.9. Use ModelAdmin.get_formsets_with_inlines() instead.",
- RemovedInDjango19Warning, stacklevel=2
- )
- if formsets:
- zipped = zip(formsets, self.get_inline_instances(request, None))
- for formset, inline in zipped:
- yield formset, inline
- else:
- for inline in self.get_inline_instances(request, obj):
- yield inline.get_formset(request, obj), inline
+ for inline in self.get_inline_instances(request, obj):
+ yield inline.get_formset(request, obj), inline
def get_paginator(self, request, queryset, per_page, orphans=0, allow_empty_first_page=True):
return self.paginator(queryset, per_page, orphans, allow_empty_first_page)
diff --git a/docs/ref/contrib/admin/index.txt b/docs/ref/contrib/admin/index.txt
index 317d48f351..bf448f5972 100644
--- a/docs/ref/contrib/admin/index.txt
+++ b/docs/ref/contrib/admin/index.txt
@@ -1514,26 +1514,6 @@ templates used by the :class:`ModelAdmin` views:
You may also simply return a custom :class:`~django.forms.ModelForm` class
directly.
-.. method:: ModelAdmin.get_formsets(request, obj=None)
-
- .. deprecated:: 1.7
- Use :meth:`get_formsets_with_inlines()` instead.
-
- Yields :class:`InlineModelAdmin`\s for use in admin add and change views.
-
- For example if you wanted to display a particular inline only in the change
- view, you could override ``get_formsets`` as follows::
-
- class MyModelAdmin(admin.ModelAdmin):
- inlines = [MyInline, SomeOtherInline]
-
- def get_formsets(self, request, obj=None):
- for inline in self.get_inline_instances(request, obj):
- # hide MyInline in the add view
- if isinstance(inline, MyInline) and obj is None:
- continue
- yield inline.get_formset(request, obj)
-
.. method:: ModelAdmin.get_formsets_with_inlines(request, obj=None)
Yields (``FormSet``, :class:`InlineModelAdmin`) pairs for use in admin add
diff --git a/tests/generic_inline_admin/tests.py b/tests/generic_inline_admin/tests.py
index ebc54e082b..1458f6f73f 100644
--- a/tests/generic_inline_admin/tests.py
+++ b/tests/generic_inline_admin/tests.py
@@ -1,6 +1,5 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
-import warnings
from django.contrib import admin
from django.contrib.admin.sites import AdminSite
@@ -9,8 +8,7 @@ from django.contrib.contenttypes.admin import GenericTabularInline
from django.contrib.contenttypes.forms import generic_inlineformset_factory
from django.forms.formsets import DEFAULT_MAX_NUM
from django.forms.models import ModelForm
-from django.test import RequestFactory, TestCase, ignore_warnings, override_settings
-from django.utils.deprecation import RemovedInDjango19Warning
+from django.test import RequestFactory, TestCase, override_settings
# local test models
from .admin import MediaInline, MediaPermanentInline, site as admin_site
@@ -432,49 +430,6 @@ class GenericInlineModelAdminTest(TestCase):
form = ma.get_formset(None).form
self.assertEqual(form._meta.fields, ['url', 'description'])
- def test_get_formsets_with_inlines(self):
- """
- get_formsets() triggers a deprecation warning when get_formsets is
- overridden.
- """
- class MediaForm(ModelForm):
- class Meta:
- model = Media
- exclude = ['url']
-
- class MediaInline(GenericTabularInline):
- exclude = ['description']
- form = MediaForm
- model = Media
-
- class EpisodeAdmin(admin.ModelAdmin):
- inlines = [
- MediaInline
- ]
-
- def get_formsets(self, request, obj=None):
- return []
-
- with warnings.catch_warnings(record=True) as w:
- warnings.simplefilter("always")
- ma = EpisodeAdmin(Episode, self.site)
- list(ma.get_formsets_with_inlines(request))
- # Verify that the deprecation warning was triggered when get_formsets was called
- # This verifies that we called that method.
- self.assertEqual(len(w), 1)
- self.assertTrue(issubclass(w[0].category, RemovedInDjango19Warning))
-
- class EpisodeAdmin(admin.ModelAdmin):
- inlines = [
- MediaInline
- ]
- with warnings.catch_warnings(record=True) as w:
- warnings.simplefilter("always")
- ma = EpisodeAdmin(Episode, self.site)
- list(ma.get_formsets_with_inlines(request))
- self.assertEqual(len(w), 0)
-
- @ignore_warnings(category=RemovedInDjango19Warning)
def test_get_formsets_with_inlines_returns_tuples(self):
"""
Ensure that get_formsets_with_inlines() returns the correct tuples.
@@ -500,19 +455,3 @@ class GenericInlineModelAdminTest(TestCase):
inlines = ma.get_inline_instances(request)
for (formset, inline), other_inline in zip(ma.get_formsets_with_inlines(request), inlines):
self.assertIsInstance(formset, other_inline.get_formset(request).__class__)
-
- class EpisodeAdmin(admin.ModelAdmin):
- inlines = [
- AlternateInline, MediaInline
- ]
-
- def get_formsets(self, request, obj=None):
- # Override get_formsets to force the usage of get_formsets in
- # ModelAdmin.get_formsets_with_inlines() then ignore the
- # warning raised by ModelAdmin.get_formsets_with_inlines()
- return self._get_formsets(request, obj)
-
- ma = EpisodeAdmin(Episode, self.site)
- inlines = ma.get_inline_instances(request)
- for (formset, inline), other_inline in zip(ma.get_formsets_with_inlines(request), inlines):
- self.assertIsInstance(formset, other_inline.get_formset(request).__class__)