mirror of
https://github.com/django/django.git
synced 2024-12-23 01:25:58 +00:00
Refs #9602 -- Moved AlreadyRegistered/NotRegistered exceptions to django.contrib.admin.exceptions.
This commit is contained in:
parent
eed096574f
commit
2584783f46
@ -3,6 +3,7 @@ from itertools import chain
|
|||||||
|
|
||||||
from django.apps import apps
|
from django.apps import apps
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from django.contrib.admin.exceptions import NotRegistered
|
||||||
from django.contrib.admin.utils import NotRelationField, flatten, get_fields_from_path
|
from django.contrib.admin.utils import NotRelationField, flatten, get_fields_from_path
|
||||||
from django.core import checks
|
from django.core import checks
|
||||||
from django.core.exceptions import FieldDoesNotExist
|
from django.core.exceptions import FieldDoesNotExist
|
||||||
@ -220,8 +221,6 @@ class BaseModelAdminChecks:
|
|||||||
ManyToManyField and that the item has a related ModelAdmin with
|
ManyToManyField and that the item has a related ModelAdmin with
|
||||||
search_fields defined.
|
search_fields defined.
|
||||||
"""
|
"""
|
||||||
from django.contrib.admin.sites import NotRegistered
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
field = obj.model._meta.get_field(field_name)
|
field = obj.model._meta.get_field(field_name)
|
||||||
except FieldDoesNotExist:
|
except FieldDoesNotExist:
|
||||||
|
@ -11,3 +11,15 @@ class DisallowedModelAdminToField(SuspiciousOperation):
|
|||||||
"""Invalid to_field was passed to admin view via URL query string"""
|
"""Invalid to_field was passed to admin view via URL query string"""
|
||||||
|
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class AlreadyRegistered(Exception):
|
||||||
|
"""The model is already registered."""
|
||||||
|
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class NotRegistered(Exception):
|
||||||
|
"""The model is not registered."""
|
||||||
|
|
||||||
|
pass
|
||||||
|
@ -7,6 +7,7 @@ certain test -- e.g. being a DateField or ForeignKey.
|
|||||||
"""
|
"""
|
||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
|
from django.contrib.admin.exceptions import NotRegistered
|
||||||
from django.contrib.admin.options import IncorrectLookupParameters
|
from django.contrib.admin.options import IncorrectLookupParameters
|
||||||
from django.contrib.admin.utils import (
|
from django.contrib.admin.utils import (
|
||||||
build_q_object_from_lookup_parameters,
|
build_q_object_from_lookup_parameters,
|
||||||
@ -257,8 +258,6 @@ class RelatedFieldListFilter(FieldListFilter):
|
|||||||
"""
|
"""
|
||||||
Return the model admin's ordering for related field, if provided.
|
Return the model admin's ordering for related field, if provided.
|
||||||
"""
|
"""
|
||||||
from django.contrib.admin.sites import NotRegistered
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
related_admin = model_admin.admin_site.get_model_admin(
|
related_admin = model_admin.admin_site.get_model_admin(
|
||||||
field.remote_field.model
|
field.remote_field.model
|
||||||
|
@ -14,7 +14,7 @@ from django.contrib.admin.checks import (
|
|||||||
InlineModelAdminChecks,
|
InlineModelAdminChecks,
|
||||||
ModelAdminChecks,
|
ModelAdminChecks,
|
||||||
)
|
)
|
||||||
from django.contrib.admin.exceptions import DisallowedModelAdminToField
|
from django.contrib.admin.exceptions import DisallowedModelAdminToField, NotRegistered
|
||||||
from django.contrib.admin.templatetags.admin_urls import add_preserved_filters
|
from django.contrib.admin.templatetags.admin_urls import add_preserved_filters
|
||||||
from django.contrib.admin.utils import (
|
from django.contrib.admin.utils import (
|
||||||
NestedObjects,
|
NestedObjects,
|
||||||
@ -160,8 +160,6 @@ class BaseModelAdmin(metaclass=forms.MediaDefiningClass):
|
|||||||
|
|
||||||
If kwargs are given, they're passed to the form Field's constructor.
|
If kwargs are given, they're passed to the form Field's constructor.
|
||||||
"""
|
"""
|
||||||
from django.contrib.admin.sites import NotRegistered
|
|
||||||
|
|
||||||
# If the field specifies choices, we don't need to look for special
|
# If the field specifies choices, we don't need to look for special
|
||||||
# admin widgets - we just need to use a select widget of some kind.
|
# admin widgets - we just need to use a select widget of some kind.
|
||||||
if db_field.choices:
|
if db_field.choices:
|
||||||
@ -252,8 +250,6 @@ class BaseModelAdmin(metaclass=forms.MediaDefiningClass):
|
|||||||
ordering. Otherwise don't specify the queryset, let the field decide
|
ordering. Otherwise don't specify the queryset, let the field decide
|
||||||
(return None in that case).
|
(return None in that case).
|
||||||
"""
|
"""
|
||||||
from django.contrib.admin.sites import NotRegistered
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
related_admin = self.admin_site.get_model_admin(db_field.remote_field.model)
|
related_admin = self.admin_site.get_model_admin(db_field.remote_field.model)
|
||||||
except NotRegistered:
|
except NotRegistered:
|
||||||
|
@ -4,6 +4,7 @@ from weakref import WeakSet
|
|||||||
from django.apps import apps
|
from django.apps import apps
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.admin import ModelAdmin, actions
|
from django.contrib.admin import ModelAdmin, actions
|
||||||
|
from django.contrib.admin.exceptions import AlreadyRegistered, NotRegistered
|
||||||
from django.contrib.admin.views.autocomplete import AutocompleteJsonView
|
from django.contrib.admin.views.autocomplete import AutocompleteJsonView
|
||||||
from django.contrib.auth import REDIRECT_FIELD_NAME
|
from django.contrib.auth import REDIRECT_FIELD_NAME
|
||||||
from django.core.exceptions import ImproperlyConfigured
|
from django.core.exceptions import ImproperlyConfigured
|
||||||
@ -25,14 +26,6 @@ from django.views.i18n import JavaScriptCatalog
|
|||||||
all_sites = WeakSet()
|
all_sites = WeakSet()
|
||||||
|
|
||||||
|
|
||||||
class AlreadyRegistered(Exception):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class NotRegistered(Exception):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class AdminSite:
|
class AdminSite:
|
||||||
"""
|
"""
|
||||||
An AdminSite object encapsulates an instance of the Django admin application, ready
|
An AdminSite object encapsulates an instance of the Django admin application, ready
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
from django.apps import apps
|
from django.apps import apps
|
||||||
|
from django.contrib.admin.exceptions import NotRegistered
|
||||||
from django.core.exceptions import FieldDoesNotExist, PermissionDenied
|
from django.core.exceptions import FieldDoesNotExist, PermissionDenied
|
||||||
from django.http import Http404, JsonResponse
|
from django.http import Http404, JsonResponse
|
||||||
from django.views.generic.list import BaseListView
|
from django.views.generic.list import BaseListView
|
||||||
@ -74,8 +75,6 @@ class AutocompleteJsonView(BaseListView):
|
|||||||
Raise Http404 if the target model admin is not configured properly with
|
Raise Http404 if the target model admin is not configured properly with
|
||||||
search_fields.
|
search_fields.
|
||||||
"""
|
"""
|
||||||
from django.contrib.admin.sites import NotRegistered
|
|
||||||
|
|
||||||
term = request.GET.get("term", "")
|
term = request.GET.get("term", "")
|
||||||
try:
|
try:
|
||||||
app_label = request.GET["app_label"]
|
app_label = request.GET["app_label"]
|
||||||
|
@ -3014,14 +3014,14 @@ Templates can override or extend base admin templates as described in
|
|||||||
as options to the admin class.
|
as options to the admin class.
|
||||||
|
|
||||||
Raises :class:`~django.core.exceptions.ImproperlyConfigured` if a model is
|
Raises :class:`~django.core.exceptions.ImproperlyConfigured` if a model is
|
||||||
abstract. and ``django.contrib.admin.sites.AlreadyRegistered`` if a model
|
abstract. and ``django.contrib.admin.exceptions.AlreadyRegistered`` if a
|
||||||
is already registered.
|
model is already registered.
|
||||||
|
|
||||||
.. method:: AdminSite.unregister(model_or_iterable)
|
.. method:: AdminSite.unregister(model_or_iterable)
|
||||||
|
|
||||||
Unregisters the given model class (or iterable of classes).
|
Unregisters the given model class (or iterable of classes).
|
||||||
|
|
||||||
Raises ``django.contrib.admin.sites.NotRegistered`` if a model isn't
|
Raises ``django.contrib.admin.exceptions.NotRegistered`` if a model isn't
|
||||||
already registered.
|
already registered.
|
||||||
|
|
||||||
.. method:: AdminSite.get_model_admin(model)
|
.. method:: AdminSite.get_model_admin(model)
|
||||||
@ -3029,7 +3029,7 @@ Templates can override or extend base admin templates as described in
|
|||||||
.. versionadded:: 5.0
|
.. versionadded:: 5.0
|
||||||
|
|
||||||
Returns an admin class for the given model class. Raises
|
Returns an admin class for the given model class. Raises
|
||||||
``django.contrib.admin.sites.NotRegistered`` if a model isn't registered.
|
``django.contrib.admin.exceptions.NotRegistered`` if a model isn't registered.
|
||||||
|
|
||||||
.. method:: AdminSite.get_log_entries(request)
|
.. method:: AdminSite.get_log_entries(request)
|
||||||
|
|
||||||
|
@ -487,6 +487,9 @@ Miscellaneous
|
|||||||
* The minimum supported version of ``selenium`` is increased from 3.8.0 to
|
* The minimum supported version of ``selenium`` is increased from 3.8.0 to
|
||||||
4.8.0.
|
4.8.0.
|
||||||
|
|
||||||
|
* The ``AlreadyRegistered`` and ``NotRegistered`` exceptions are moved from
|
||||||
|
``django.contrib.admin.sites`` to ``django.contrib.admin.exceptions``.
|
||||||
|
|
||||||
.. _deprecated-features-5.0:
|
.. _deprecated-features-5.0:
|
||||||
|
|
||||||
Features deprecated in 5.0
|
Features deprecated in 5.0
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.contrib.admin.decorators import register
|
from django.contrib.admin.decorators import register
|
||||||
|
from django.contrib.admin.exceptions import AlreadyRegistered, NotRegistered
|
||||||
from django.contrib.admin.sites import site
|
from django.contrib.admin.sites import site
|
||||||
from django.core.exceptions import ImproperlyConfigured
|
from django.core.exceptions import ImproperlyConfigured
|
||||||
from django.test import SimpleTestCase
|
from django.test import SimpleTestCase
|
||||||
@ -35,7 +36,7 @@ class TestRegistration(SimpleTestCase):
|
|||||||
def test_prevent_double_registration(self):
|
def test_prevent_double_registration(self):
|
||||||
self.site.register(Person)
|
self.site.register(Person)
|
||||||
msg = "The model Person is already registered in app 'admin_registration'."
|
msg = "The model Person is already registered in app 'admin_registration'."
|
||||||
with self.assertRaisesMessage(admin.sites.AlreadyRegistered, msg):
|
with self.assertRaisesMessage(AlreadyRegistered, msg):
|
||||||
self.site.register(Person)
|
self.site.register(Person)
|
||||||
|
|
||||||
def test_prevent_double_registration_for_custom_admin(self):
|
def test_prevent_double_registration_for_custom_admin(self):
|
||||||
@ -47,12 +48,12 @@ class TestRegistration(SimpleTestCase):
|
|||||||
"The model Person is already registered with "
|
"The model Person is already registered with "
|
||||||
"'admin_registration.PersonAdmin'."
|
"'admin_registration.PersonAdmin'."
|
||||||
)
|
)
|
||||||
with self.assertRaisesMessage(admin.sites.AlreadyRegistered, msg):
|
with self.assertRaisesMessage(AlreadyRegistered, msg):
|
||||||
self.site.register(Person, PersonAdmin)
|
self.site.register(Person, PersonAdmin)
|
||||||
|
|
||||||
def test_unregister_unregistered_model(self):
|
def test_unregister_unregistered_model(self):
|
||||||
msg = "The model Person is not registered"
|
msg = "The model Person is not registered"
|
||||||
with self.assertRaisesMessage(admin.sites.NotRegistered, msg):
|
with self.assertRaisesMessage(NotRegistered, msg):
|
||||||
self.site.unregister(Person)
|
self.site.unregister(Person)
|
||||||
|
|
||||||
def test_registration_with_star_star_options(self):
|
def test_registration_with_star_star_options(self):
|
||||||
@ -61,7 +62,7 @@ class TestRegistration(SimpleTestCase):
|
|||||||
|
|
||||||
def test_get_model_admin_unregister_model(self):
|
def test_get_model_admin_unregister_model(self):
|
||||||
msg = "The model Person is not registered."
|
msg = "The model Person is not registered."
|
||||||
with self.assertRaisesMessage(admin.sites.NotRegistered, msg):
|
with self.assertRaisesMessage(NotRegistered, msg):
|
||||||
self.site.get_model_admin(Person)
|
self.site.get_model_admin(Person)
|
||||||
|
|
||||||
def test_star_star_overrides(self):
|
def test_star_star_overrides(self):
|
||||||
|
@ -3,7 +3,7 @@ import json
|
|||||||
from contextlib import contextmanager
|
from contextlib import contextmanager
|
||||||
|
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.contrib.admin.sites import NotRegistered
|
from django.contrib.admin.exceptions import NotRegistered
|
||||||
from django.contrib.admin.tests import AdminSeleniumTestCase
|
from django.contrib.admin.tests import AdminSeleniumTestCase
|
||||||
from django.contrib.admin.views.autocomplete import AutocompleteJsonView
|
from django.contrib.admin.views.autocomplete import AutocompleteJsonView
|
||||||
from django.contrib.auth.models import Permission, User
|
from django.contrib.auth.models import Permission, User
|
||||||
|
Loading…
Reference in New Issue
Block a user