summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2008-08-30 04:52:56 +0000
committerMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2008-08-30 04:52:56 +0000
commitfd0cc45828e11e5e8936817e7a76c6bd5a8d0460 (patch)
treecec65add265e3af605fbaff8747f64c7b6f58613
parentc60e22c073a46e4701a16ed473966a3d108841ba (diff)
[8721] introduced some internal field names. We hide them from the list of
valid field names in debugging output so that it doesn't confuse things. git-svn-id: http://code.djangoproject.com/svn/django/trunk@8730 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/db/models/options.py8
-rw-r--r--tests/regressiontests/m2m_regress/models.py7
2 files changed, 13 insertions, 2 deletions
diff --git a/django/db/models/options.py b/django/db/models/options.py
index 3648cf0710..cee45d2abd 100644
--- a/django/db/models/options.py
+++ b/django/db/models/options.py
@@ -280,7 +280,9 @@ class Options(object):
def get_all_field_names(self):
"""
Returns a list of all field names that are possible for this model
- (including reverse relation names).
+ (including reverse relation names). This is used for pretty printing
+ debugging output (a list of choices), so any internal-only field names
+ are not included.
"""
try:
cache = self._name_map
@@ -288,7 +290,9 @@ class Options(object):
cache = self.init_name_map()
names = cache.keys()
names.sort()
- return names
+ # Internal-only names end with "+" (symmetrical m2m related names being
+ # the main example). Trim them.
+ return [val for val in names if not val.endswith('+')]
def init_name_map(self):
"""
diff --git a/tests/regressiontests/m2m_regress/models.py b/tests/regressiontests/m2m_regress/models.py
index e641d3dadb..cffc137e70 100644
--- a/tests/regressiontests/m2m_regress/models.py
+++ b/tests/regressiontests/m2m_regress/models.py
@@ -52,5 +52,12 @@ __test__ = {"regressions": """
>>> e1.related.all()
[<Tag: t2>]
+# The secret internal related names for self-referential many-to-many fields
+# shouldn't appear in the list when an error is made.
+>>> SelfRefer.objects.filter(porcupine='fred')
+Traceback (most recent call last):
+...
+FieldError: Cannot resolve keyword 'porcupine' into field. Choices are: id, name, references, related
+
"""
}