Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Changed the way we create class names for deferred field models to avoid

problems when people have hundreds of fields on model. Maximum class
name length is now 80 characters and uses a hash when necessary.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@13819 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit 17a79d503302f3aad5e2439d858d6e3cbba102e4 1 parent 4084bc7
@malcolmt malcolmt authored
Showing with 7 additions and 5 deletions.
  1. +3 −3 django/db/backends/util.py
  2. +4 −2 django/db/models/query_utils.py
View
6 django/db/backends/util.py
@@ -105,15 +105,15 @@ def rev_typecast_decimal(d):
return None
return str(d)
-def truncate_name(name, length=None):
+def truncate_name(name, length=None, hash_len=4):
"""Shortens a string to a repeatable mangled version with the given length.
"""
if length is None or len(name) <= length:
return name
- hash = md5_constructor(name).hexdigest()[:4]
+ hash = md5_constructor(name).hexdigest()[:hash_len]
- return '%s%s' % (name[:length-4], hash)
+ return '%s%s' % (name[:length-hash_len], hash)
def format_number(value, max_digits, decimal_places):
"""
View
6 django/db/models/query_utils.py
@@ -9,6 +9,7 @@
import weakref
from django.utils.copycompat import deepcopy
+from django.db.backends import util
from django.utils import tree
from django.utils.datastructures import SortedDict
@@ -262,9 +263,10 @@ class Meta:
# The app_cache wants a unique name for each model, otherwise the new class
# won't be created (we get an old one back). Therefore, we generate the
- # name using the passed in attrs. It's OK to reuse an old case if the attrs
- # are identical.
+ # name using the passed in attrs. It's OK to reuse an existing class
+ # object if the attrs are identical.
name = "%s_Deferred_%s" % (model.__name__, '_'.join(sorted(list(attrs))))
+ name = util.truncate_name(name, 80, 32)
overrides = dict([(attr, DeferredAttribute(attr, model))
for attr in attrs])
Please sign in to comment.
Something went wrong with that request. Please try again.