summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPrashant Pandey <prashantpandey94551@gmail.com>2023-11-23 10:29:52 +0530
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2023-11-23 21:17:44 +0100
commita8adb6aa6cc6b9efd043acc980b5744bc211c760 (patch)
treef9c284c705b95baba0c2dc450bb18798377a70dc
parenta89c715c3bcf7ab1a90747cf8658ebce6304b6e4 (diff)
Fixed #26827 -- Improved ModelState error message when relations refer model classes.
-rw-r--r--AUTHORS1
-rw-r--r--django/db/migrations/state.py10
-rw-r--r--tests/migrations/test_state.py8
3 files changed, 11 insertions, 8 deletions
diff --git a/AUTHORS b/AUTHORS
index 0247503197..f63f712f3a 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -816,6 +816,7 @@ answer newbie questions, and generally made Django that much better:
plisk
polpak@yahoo.com
pradeep.gowda@gmail.com
+ Prashant Pandey <https://prashantpandey9.in>
Preston Holmes <preston@ptone.com>
Preston Timmons <prestontimmons@gmail.com>
Priyank Panchal <priyankpanchal872000@gmail.com>
diff --git a/django/db/migrations/state.py b/django/db/migrations/state.py
index 4aa6e1f6cc..5ffd7fc07a 100644
--- a/django/db/migrations/state.py
+++ b/django/db/migrations/state.py
@@ -738,13 +738,15 @@ class ModelState:
# Sanity-check that relation fields are NOT referring to a model class.
if field.is_relation and hasattr(field.related_model, "_meta"):
raise ValueError(
- 'ModelState.fields cannot refer to a model class - "%s.to" does. '
- "Use a string reference instead." % name
+ 'Model fields in "ModelState.fields" cannot refer to a model class '
+ f'- "{self.app_label}.{self.name}.{name}.to" does. Use a string '
+ "reference instead."
)
if field.many_to_many and hasattr(field.remote_field.through, "_meta"):
raise ValueError(
- 'ModelState.fields cannot refer to a model class - "%s.through" '
- "does. Use a string reference instead." % name
+ 'Model fields in "ModelState.fields" cannot refer to a model class '
+ f'- "{self.app_label}.{self.name}.{name}.through" does. Use a '
+ "string reference instead."
)
# Sanity-check that indexes have their name set.
for index in self.options["indexes"]:
diff --git a/tests/migrations/test_state.py b/tests/migrations/test_state.py
index f1ac78c992..686eba4500 100644
--- a/tests/migrations/test_state.py
+++ b/tests/migrations/test_state.py
@@ -1651,8 +1651,8 @@ class ModelStateTests(SimpleTestCase):
field = models.ForeignKey(UnicodeModel, models.CASCADE)
with self.assertRaisesMessage(
ValueError,
- 'ModelState.fields cannot refer to a model class - "field.to" does. '
- "Use a string reference instead.",
+ 'Model fields in "ModelState.fields" cannot refer to a model class - '
+ '"app.Model.field.to" does. Use a string reference instead.',
):
ModelState("app", "Model", [("field", field)])
@@ -1661,8 +1661,8 @@ class ModelStateTests(SimpleTestCase):
field.remote_field.through = UnicodeModel
with self.assertRaisesMessage(
ValueError,
- 'ModelState.fields cannot refer to a model class - "field.through" does. '
- "Use a string reference instead.",
+ 'Model fields in "ModelState.fields" cannot refer to a model class - '
+ '"app.Model.field.through" does. Use a string reference instead.',
):
ModelState("app", "Model", [("field", field)])