summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCollin Anderson <cmawebsite@gmail.com>2016-08-18 12:45:27 -0400
committerTim Graham <timograham@gmail.com>2016-08-23 16:06:41 -0400
commit4073780219258eec2d3c5f7b84f4f0a3c3cc6515 (patch)
treec315ce04c4151e54e386a17fdc10dd0cdfcf1a1a
parentae0f55eb491255217d6df31296ec8102007224a6 (diff)
[1.10.x] Fixed #26998 -- Reverted some admin checks from checking field.many_to_many back to isinstance(field, models.ManyToManyField).
This partially reverts 983c158da7723eb00a376bd31db76709da4d0260 Backport of 384f89f8f843953ac11cf211f85291b5c14baeb9 from master
-rw-r--r--django/contrib/admin/checks.py13
-rw-r--r--docs/ref/checks.txt8
-rw-r--r--docs/releases/1.10.1.txt4
-rw-r--r--tests/admin_checks/tests.py6
-rw-r--r--tests/modeladmin/tests.py4
5 files changed, 20 insertions, 15 deletions
diff --git a/django/contrib/admin/checks.py b/django/contrib/admin/checks.py
index 87788c8f30..240b2f5563 100644
--- a/django/contrib/admin/checks.py
+++ b/django/contrib/admin/checks.py
@@ -217,10 +217,11 @@ class BaseModelAdminChecks(object):
# be an extra field on the form.
return []
else:
- if field.many_to_many and not field.remote_field.through._meta.auto_created:
+ if (isinstance(field, models.ManyToManyField) and
+ not field.remote_field.through._meta.auto_created):
return [
checks.Error(
- "The value of '%s' cannot include the many-to-many field '%s' "
+ "The value of '%s' cannot include the ManyToManyField '%s', "
"because that field manually specifies a relationship model."
% (label, field_name),
obj=obj.__class__,
@@ -393,11 +394,11 @@ class BaseModelAdminChecks(object):
return refer_to_missing_field(field=field_name, option=label,
model=model, obj=obj, id='admin.E027')
else:
- if field.many_to_many or isinstance(field, (models.DateTimeField, models.ForeignKey)):
+ if isinstance(field, (models.DateTimeField, models.ForeignKey, models.ManyToManyField)):
return [
checks.Error(
"The value of '%s' refers to '%s', which must not be a DateTimeField, "
- "a foreign key, or a many-to-many field." % (label, field_name),
+ "a ForeignKey, or a ManyToManyField." % (label, field_name),
obj=obj.__class__,
id='admin.E028',
)
@@ -621,10 +622,10 @@ class ModelAdminChecks(BaseModelAdminChecks):
id='admin.E108',
)
]
- elif getattr(field, 'many_to_many', False):
+ elif isinstance(field, models.ManyToManyField):
return [
checks.Error(
- "The value of '%s' must not be a many-to-many field." % label,
+ "The value of '%s' must not be a ManyToManyField." % label,
obj=obj.__class__,
id='admin.E109',
)
diff --git a/docs/ref/checks.txt b/docs/ref/checks.txt
index 03bdba97db..fce22689fe 100644
--- a/docs/ref/checks.txt
+++ b/docs/ref/checks.txt
@@ -302,7 +302,7 @@ with the admin site:
``fields``.
* **admin.E012**: There are duplicate field(s) in ``fieldsets[n][1]``.
* **admin.E013**: ``fields[n]/fieldsets[n][m]`` cannot include the
- many-to-many field ``<field name>``, because that field manually specifies a
+ ``ManyToManyField`` ``<field name>``, because that field manually specifies a
relationship model.
* **admin.E014**: The value of ``exclude`` must be a list or tuple.
* **admin.E015**: The value of ``exclude`` contains duplicate field(s).
@@ -326,8 +326,8 @@ with the admin site:
* **admin.E027**: The value of ``prepopulated_fields`` refers to
``<field name>``, which is not an attribute of ``<model>``.
* **admin.E028**: The value of ``prepopulated_fields`` refers to
- ``<field name>``, which must not be a ``DateTimeField``, a foreign key or a
- many-to-many field.
+ ``<field name>``, which must not be a ``DateTimeField``, a ``ForeignKey``, or a
+ ``ManyToManyField`` field.
* **admin.E029**: The value of ``prepopulated_fields[<field name>]`` must be a
list or tuple.
* **admin.E030**: The value of ``prepopulated_fields`` refers to
@@ -361,7 +361,7 @@ with the admin site:
which is not a callable, an attribute of ``<ModelAdmin class>``, or an
attribute or method on ``<model>``.
* **admin.E109**: The value of ``list_display[n]`` must not be a
- many-to-many field.
+ ``ManyToManyField`` field.
* **admin.E110**: The value of ``list_display_links`` must be a list, a tuple,
or ``None``.
* **admin.E111**: The value of ``list_display_links[n]`` refers to ``<label>``,
diff --git a/docs/releases/1.10.1.txt b/docs/releases/1.10.1.txt
index e8dc05c7eb..88edfa80cf 100644
--- a/docs/releases/1.10.1.txt
+++ b/docs/releases/1.10.1.txt
@@ -61,3 +61,7 @@ Bugfixes
* Fixed ``contrib.admindocs`` crash when a view is in a class, such as some of
the admin views (:ticket:`27018`).
+
+* Reverted a few admin checks that checked ``field.many_to_many`` back to
+ ``isinstance(field, models.ManyToManyField)`` since it turned out the checks
+ weren't suitable to be generalized like that (:ticket:`26998`).
diff --git a/tests/admin_checks/tests.py b/tests/admin_checks/tests.py
index c584cd42c9..2cf7f66d9d 100644
--- a/tests/admin_checks/tests.py
+++ b/tests/admin_checks/tests.py
@@ -583,7 +583,7 @@ class SystemChecksTestCase(SimpleTestCase):
errors = BookAdmin(Book, AdminSite()).check()
expected = [
checks.Error(
- "The value of 'fields' cannot include the many-to-many field 'authors' "
+ "The value of 'fields' cannot include the ManyToManyField 'authors', "
"because that field manually specifies a relationship model.",
obj=BookAdmin,
id='admin.E013',
@@ -601,8 +601,8 @@ class SystemChecksTestCase(SimpleTestCase):
errors = FieldsetBookAdmin(Book, AdminSite()).check()
expected = [
checks.Error(
- "The value of 'fieldsets[1][1][\"fields\"]' cannot include the many-to-many field "
- "'authors' because that field manually specifies a relationship model.",
+ "The value of 'fieldsets[1][1][\"fields\"]' cannot include the ManyToManyField "
+ "'authors', because that field manually specifies a relationship model.",
obj=FieldsetBookAdmin,
id='admin.E013',
)
diff --git a/tests/modeladmin/tests.py b/tests/modeladmin/tests.py
index 990ed9ab32..b58fd0e76a 100644
--- a/tests/modeladmin/tests.py
+++ b/tests/modeladmin/tests.py
@@ -925,7 +925,7 @@ class PrepopulatedFieldsCheckTests(CheckTestCase):
self.assertIsInvalid(
ValidationTestModelAdmin, ValidationTestModel,
("The value of 'prepopulated_fields' refers to 'users', which must not be "
- "a DateTimeField, a foreign key, or a many-to-many field."),
+ "a DateTimeField, a ForeignKey, or a ManyToManyField."),
'admin.E028')
def test_valid_case(self):
@@ -963,7 +963,7 @@ class ListDisplayTests(CheckTestCase):
self.assertIsInvalid(
ValidationTestModelAdmin, ValidationTestModel,
- "The value of 'list_display[0]' must not be a many-to-many field.",
+ "The value of 'list_display[0]' must not be a ManyToManyField.",
'admin.E109')
def test_valid_case(self):