From 0568a408187f2d59594879ce346307a228cdc71e Mon Sep 17 00:00:00 2001
From: Simon Charette <charette.s@gmail.com>
Date: Tue, 29 Jan 2013 02:58:43 -0500
Subject: [PATCH] Fixed 19686 -- Use module_name instead of
 object_name.lower()

---
 django/contrib/admin/actions.py            |    2 +-
 django/contrib/admin/options.py            |    8 ++++----
 django/contrib/admin/util.py               |    2 +-
 django/contrib/admin/widgets.py            |    2 +-
 django/contrib/admindocs/views.py          |    2 +-
 django/contrib/auth/management/__init__.py |    2 +-
 django/contrib/contenttypes/generic.py     |    4 ++--
 django/contrib/contenttypes/management.py  |    2 +-
 django/contrib/contenttypes/models.py      |   10 +++++-----
 django/core/management/sql.py              |    4 ++--
 django/core/xheaders.py                    |    2 +-
 django/db/models/fields/related.py         |    8 ++++----
 django/db/models/loading.py                |    2 +-
 django/db/models/options.py                |    8 ++++----
 django/db/models/related.py                |    6 +++---
 django/views/generic/detail.py             |    6 +++---
 django/views/generic/list.py               |    4 ++--
 17 files changed, 37 insertions(+), 37 deletions(-)

diff --git a/django/contrib/admin/actions.py b/django/contrib/admin/actions.py
index 2011017..3a414d7 100644
--- a/django/contrib/admin/actions.py
+++ b/django/contrib/admin/actions.py
@@ -75,7 +75,7 @@ def delete_selected(modeladmin, request, queryset):
 
     # Display the confirmation page
     return TemplateResponse(request, modeladmin.delete_selected_confirmation_template or [
-        "admin/%s/%s/delete_selected_confirmation.html" % (app_label, opts.object_name.lower()),
+        "admin/%s/%s/delete_selected_confirmation.html" % (app_label, opts.module_name),
         "admin/%s/delete_selected_confirmation.html" % app_label,
         "admin/delete_selected_confirmation.html"
     ], context, current_app=modeladmin.admin_site.name)
diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py
index 8e0aacc..311bb36 100644
--- a/django/contrib/admin/options.py
+++ b/django/contrib/admin/options.py
@@ -783,7 +783,7 @@ class ModelAdmin(BaseModelAdmin):
             form_template = self.change_form_template
 
         return TemplateResponse(request, form_template or [
-            "admin/%s/%s/change_form.html" % (app_label, opts.object_name.lower()),
+            "admin/%s/%s/change_form.html" % (app_label, opts.module_name),
             "admin/%s/change_form.html" % app_label,
             "admin/change_form.html"
         ], context, current_app=self.admin_site.name)
@@ -1283,7 +1283,7 @@ class ModelAdmin(BaseModelAdmin):
         context.update(extra_context or {})
 
         return TemplateResponse(request, self.change_list_template or [
-            'admin/%s/%s/change_list.html' % (app_label, opts.object_name.lower()),
+            'admin/%s/%s/change_list.html' % (app_label, opts.module_name),
             'admin/%s/change_list.html' % app_label,
             'admin/change_list.html'
         ], context, current_app=self.admin_site.name)
@@ -1346,7 +1346,7 @@ class ModelAdmin(BaseModelAdmin):
         context.update(extra_context or {})
 
         return TemplateResponse(request, self.delete_confirmation_template or [
-            "admin/%s/%s/delete_confirmation.html" % (app_label, opts.object_name.lower()),
+            "admin/%s/%s/delete_confirmation.html" % (app_label, opts.module_name),
             "admin/%s/delete_confirmation.html" % app_label,
             "admin/delete_confirmation.html"
         ], context, current_app=self.admin_site.name)
@@ -1373,7 +1373,7 @@ class ModelAdmin(BaseModelAdmin):
         }
         context.update(extra_context or {})
         return TemplateResponse(request, self.object_history_template or [
-            "admin/%s/%s/object_history.html" % (app_label, opts.object_name.lower()),
+            "admin/%s/%s/object_history.html" % (app_label, opts.module_name),
             "admin/%s/object_history.html" % app_label,
             "admin/object_history.html"
         ], context, current_app=self.admin_site.name)
diff --git a/django/contrib/admin/util.py b/django/contrib/admin/util.py
index 07013d1..07e4a38 100644
--- a/django/contrib/admin/util.py
+++ b/django/contrib/admin/util.py
@@ -116,7 +116,7 @@ def get_deleted_objects(objs, opts, user, admin_site, using):
             admin_url = reverse('%s:%s_%s_change'
                                 % (admin_site.name,
                                    opts.app_label,
-                                   opts.object_name.lower()),
+                                   opts.module_name),
                                 None, (quote(obj._get_pk_val()),))
             p = '%s.%s' % (opts.app_label,
                            opts.get_delete_permission())
diff --git a/django/contrib/admin/widgets.py b/django/contrib/admin/widgets.py
index a388774..0b9a143 100644
--- a/django/contrib/admin/widgets.py
+++ b/django/contrib/admin/widgets.py
@@ -247,7 +247,7 @@ class RelatedFieldWidgetWrapper(forms.Widget):
 
     def render(self, name, value, *args, **kwargs):
         rel_to = self.rel.to
-        info = (rel_to._meta.app_label, rel_to._meta.object_name.lower())
+        info = (rel_to._meta.app_label, rel_to._meta.module_name)
         self.widget.choices = self.choices
         output = [self.widget.render(name, value, *args, **kwargs)]
         if self.can_add_related:
diff --git a/django/contrib/admindocs/views.py b/django/contrib/admindocs/views.py
index cb0c116..b257b19 100644
--- a/django/contrib/admindocs/views.py
+++ b/django/contrib/admindocs/views.py
@@ -189,7 +189,7 @@ def model_detail(request, app_label, model_name):
         raise Http404(_("App %r not found") % app_label)
     model = None
     for m in models.get_models(app_mod):
-        if m._meta.object_name.lower() == model_name:
+        if m._meta.module_name == model_name:
             model = m
             break
     if model is None:
diff --git a/django/contrib/auth/management/__init__.py b/django/contrib/auth/management/__init__.py
index a77bba0..527d0f6 100644
--- a/django/contrib/auth/management/__init__.py
+++ b/django/contrib/auth/management/__init__.py
@@ -17,7 +17,7 @@ from django.utils.six.moves import input
 
 
 def _get_permission_codename(action, opts):
-    return '%s_%s' % (action, opts.object_name.lower())
+    return '%s_%s' % (action, opts.module_name)
 
 
 def _get_all_permissions(opts, ctype):
diff --git a/django/contrib/contenttypes/generic.py b/django/contrib/contenttypes/generic.py
index cda4d46..e64a0e5 100644
--- a/django/contrib/contenttypes/generic.py
+++ b/django/contrib/contenttypes/generic.py
@@ -389,7 +389,7 @@ class BaseGenericInlineFormSet(BaseModelFormSet):
         opts = self.model._meta
         self.instance = instance
         self.rel_name = '-'.join((
-            opts.app_label, opts.object_name.lower(),
+            opts.app_label, opts.module_name,
             self.ct_field.name, self.ct_fk_field.name,
         ))
         if self.instance is None or self.instance.pk is None:
@@ -409,7 +409,7 @@ class BaseGenericInlineFormSet(BaseModelFormSet):
     @classmethod
     def get_default_prefix(cls):
         opts = cls.model._meta
-        return '-'.join((opts.app_label, opts.object_name.lower(),
+        return '-'.join((opts.app_label, opts.module_name,
                         cls.ct_field.name, cls.ct_fk_field.name,
         ))
 
diff --git a/django/contrib/contenttypes/management.py b/django/contrib/contenttypes/management.py
index 8329ab6..e458c59 100644
--- a/django/contrib/contenttypes/management.py
+++ b/django/contrib/contenttypes/management.py
@@ -21,7 +21,7 @@ def update_contenttypes(app, created_models, verbosity=2, db=DEFAULT_DB_ALIAS, *
     # They all have the same app_label, get the first one.
     app_label = app_models[0]._meta.app_label
     app_models = dict(
-        (model._meta.object_name.lower(), model)
+        (model._meta.module_name, model)
         for model in app_models
     )
 
diff --git a/django/contrib/contenttypes/models.py b/django/contrib/contenttypes/models.py
index b658655..67023a5 100644
--- a/django/contrib/contenttypes/models.py
+++ b/django/contrib/contenttypes/models.py
@@ -25,7 +25,7 @@ class ContentTypeManager(models.Manager):
         return model._meta
 
     def _get_from_cache(self, opts):
-        key = (opts.app_label, opts.object_name.lower())
+        key = (opts.app_label, opts.module_name)
         return self.__class__._cache[self.db][key]
 
     def get_for_model(self, model, for_concrete_model=True):
@@ -43,7 +43,7 @@ class ContentTypeManager(models.Manager):
             # django.utils.functional.__proxy__ object.
             ct, created = self.get_or_create(
                 app_label = opts.app_label,
-                model = opts.object_name.lower(),
+                model = opts.module_name,
                 defaults = {'name': smart_text(opts.verbose_name_raw)},
             )
             self._add_to_cache(self.db, ct)
@@ -67,7 +67,7 @@ class ContentTypeManager(models.Manager):
                 ct = self._get_from_cache(opts)
             except KeyError:
                 needed_app_labels.add(opts.app_label)
-                needed_models.add(opts.object_name.lower())
+                needed_models.add(opts.module_name)
                 needed_opts.add(opts)
             else:
                 results[model] = ct
@@ -86,7 +86,7 @@ class ContentTypeManager(models.Manager):
             # These weren't in the cache, or the DB, create them.
             ct = self.create(
                 app_label=opts.app_label,
-                model=opts.object_name.lower(),
+                model=opts.module_name,
                 name=smart_text(opts.verbose_name_raw),
             )
             self._add_to_cache(self.db, ct)
@@ -119,7 +119,7 @@ class ContentTypeManager(models.Manager):
     def _add_to_cache(self, using, ct):
         """Insert a ContentType into the cache."""
         model = ct.model_class()
-        key = (model._meta.app_label, model._meta.object_name.lower())
+        key = (model._meta.app_label, model._meta.module_name)
         self.__class__._cache.setdefault(using, {})[key] = ct
         self.__class__._cache.setdefault(using, {})[ct.id] = ct
 
diff --git a/django/core/management/sql.py b/django/core/management/sql.py
index e46f4ae..e7f6685 100644
--- a/django/core/management/sql.py
+++ b/django/core/management/sql.py
@@ -173,8 +173,8 @@ def custom_sql_for_model(model, style, connection):
 
     # Find custom SQL, if it's available.
     backend_name = connection.settings_dict['ENGINE'].split('.')[-1]
-    sql_files = [os.path.join(app_dir, "%s.%s.sql" % (opts.object_name.lower(), backend_name)),
-                 os.path.join(app_dir, "%s.sql" % opts.object_name.lower())]
+    sql_files = [os.path.join(app_dir, "%s.%s.sql" % (opts.module_name, backend_name)),
+                 os.path.join(app_dir, "%s.sql" % opts.module_name)]
     for sql_file in sql_files:
         if os.path.exists(sql_file):
             with codecs.open(sql_file, 'U', encoding=settings.FILE_CHARSET) as fp:
diff --git a/django/core/xheaders.py b/django/core/xheaders.py
index b650a3a..8903d27 100644
--- a/django/core/xheaders.py
+++ b/django/core/xheaders.py
@@ -20,5 +20,5 @@ def populate_xheaders(request, response, model, object_id):
     if (request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS
             or (hasattr(request, 'user') and request.user.is_active
                 and request.user.is_staff)):
-        response['X-Object-Type'] = "%s.%s" % (model._meta.app_label, model._meta.object_name.lower())
+        response['X-Object-Type'] = "%s.%s" % (model._meta.app_label, model._meta.module_name)
         response['X-Object-Id'] = str(object_id)
diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py
index ae792a3..2d0e3ce 100644
--- a/django/db/models/fields/related.py
+++ b/django/db/models/fields/related.py
@@ -118,7 +118,7 @@ class RelatedField(object):
             self.do_related_class(other, cls)
 
     def set_attributes_from_rel(self):
-        self.name = self.name or (self.rel.to._meta.object_name.lower() + '_' + self.rel.to._meta.pk.name)
+        self.name = self.name or (self.rel.to._meta.module_name + '_' + self.rel.to._meta.pk.name)
         if self.verbose_name is None:
             self.verbose_name = self.rel.to._meta.verbose_name
         self.rel.field_name = self.rel.field_name or self.rel.to._meta.pk.name
@@ -222,7 +222,7 @@ class RelatedField(object):
         # related object in a table-spanning query. It uses the lower-cased
         # object_name by default, but this can be overridden with the
         # "related_name" option.
-        return self.rel.related_name or self.opts.object_name.lower()
+        return self.rel.related_name or self.opts.module_name
 
 
 class SingleRelatedObjectDescriptor(object):
@@ -983,7 +983,7 @@ class ForeignKey(RelatedField, Field):
 
     def __init__(self, to, to_field=None, rel_class=ManyToOneRel, **kwargs):
         try:
-            to_name = to._meta.object_name.lower()
+            to_name = to._meta.module_name
         except AttributeError:  # to._meta doesn't exist, so it must be RECURSIVE_RELATIONSHIP_CONSTANT
             assert isinstance(to, six.string_types), "%s(%r) is invalid. First parameter to ForeignKey must be either a model, a model name, or the string %r" % (self.__class__.__name__, to, RECURSIVE_RELATIONSHIP_CONSTANT)
         else:
@@ -1174,7 +1174,7 @@ def create_many_to_many_intermediary_model(field, klass):
         from_ = 'from_%s' % to.lower()
         to = 'to_%s' % to.lower()
     else:
-        from_ = klass._meta.object_name.lower()
+        from_ = klass._meta.module_name
         to = to.lower()
     meta = type('Meta', (object,), {
         'db_table': field._get_m2m_db_table(klass._meta),
diff --git a/django/db/models/loading.py b/django/db/models/loading.py
index 56edc36..391a279 100644
--- a/django/db/models/loading.py
+++ b/django/db/models/loading.py
@@ -239,7 +239,7 @@ class AppCache(object):
         for model in models:
             # Store as 'name: model' pair in a dictionary
             # in the app_models dictionary
-            model_name = model._meta.object_name.lower()
+            model_name = model._meta.module_name
             model_dict = self.app_models.setdefault(app_label, SortedDict())
             if model_name in model_dict:
                 # The same model may be imported via different paths (e.g.
diff --git a/django/db/models/options.py b/django/db/models/options.py
index 952596b..c8b4690 100644
--- a/django/db/models/options.py
+++ b/django/db/models/options.py
@@ -217,7 +217,7 @@ class Options(object):
         case insensitive, so we make sure we are case insensitive here.
         """
         if self.swappable:
-            model_label = '%s.%s' % (self.app_label, self.object_name.lower())
+            model_label = '%s.%s' % (self.app_label, self.module_name)
             swapped_for = getattr(settings, self.swappable, None)
             if swapped_for:
                 try:
@@ -371,13 +371,13 @@ class Options(object):
         return cache
 
     def get_add_permission(self):
-        return 'add_%s' % self.object_name.lower()
+        return 'add_%s' % self.module_name
 
     def get_change_permission(self):
-        return 'change_%s' % self.object_name.lower()
+        return 'change_%s' % self.module_name
 
     def get_delete_permission(self):
-        return 'delete_%s' % self.object_name.lower()
+        return 'delete_%s' % self.module_name
 
     def get_all_related_objects(self, local_only=False, include_hidden=False,
                                 include_proxy_eq=False):
diff --git a/django/db/models/related.py b/django/db/models/related.py
index 2693213..e904269 100644
--- a/django/db/models/related.py
+++ b/django/db/models/related.py
@@ -17,7 +17,7 @@ class RelatedObject(object):
         self.opts = model._meta
         self.field = field
         self.name = '%s:%s' % (self.opts.app_label, self.opts.module_name)
-        self.var_name = self.opts.object_name.lower()
+        self.var_name = self.opts.module_name
 
     def get_choices(self, include_blank=True, blank_choice=BLANK_CHOICE_DASH,
                     limit_to_currently_related=False):
@@ -56,9 +56,9 @@ class RelatedObject(object):
             # If this is a symmetrical m2m relation on self, there is no reverse accessor.
             if getattr(self.field.rel, 'symmetrical', False) and self.model == self.parent_model:
                 return None
-            return self.field.rel.related_name or (self.opts.object_name.lower() + '_set')
+            return self.field.rel.related_name or (self.opts.module_name + '_set')
         else:
-            return self.field.rel.related_name or (self.opts.object_name.lower())
+            return self.field.rel.related_name or (self.opts.module_name)
 
     def get_cache_name(self):
         return "_%s_cache" % self.get_accessor_name()
diff --git a/django/views/generic/detail.py b/django/views/generic/detail.py
index c27b92b..27215fe 100644
--- a/django/views/generic/detail.py
+++ b/django/views/generic/detail.py
@@ -84,7 +84,7 @@ class SingleObjectMixin(ContextMixin):
         if self.context_object_name:
             return self.context_object_name
         elif isinstance(obj, models.Model):
-            return obj._meta.object_name.lower()
+            return obj._meta.module_name
         else:
             return None
 
@@ -144,13 +144,13 @@ class SingleObjectTemplateResponseMixin(TemplateResponseMixin):
         if isinstance(self.object, models.Model):
             names.append("%s/%s%s.html" % (
                 self.object._meta.app_label,
-                self.object._meta.object_name.lower(),
+                self.object._meta.module_name,
                 self.template_name_suffix
             ))
         elif hasattr(self, 'model') and self.model is not None and issubclass(self.model, models.Model):
             names.append("%s/%s%s.html" % (
                 self.model._meta.app_label,
-                self.model._meta.object_name.lower(),
+                self.model._meta.module_name,
                 self.template_name_suffix
             ))
         return names
diff --git a/django/views/generic/list.py b/django/views/generic/list.py
index 1f28616..48f7783 100644
--- a/django/views/generic/list.py
+++ b/django/views/generic/list.py
@@ -97,7 +97,7 @@ class MultipleObjectMixin(ContextMixin):
         if self.context_object_name:
             return self.context_object_name
         elif hasattr(object_list, 'model'):
-            return '%s_list' % object_list.model._meta.object_name.lower()
+            return '%s_list' % object_list.model._meta.module_name
         else:
             return None
 
@@ -177,7 +177,7 @@ class MultipleObjectTemplateResponseMixin(TemplateResponseMixin):
         # generated ones.
         if hasattr(self.object_list, 'model'):
             opts = self.object_list.model._meta
-            names.append("%s/%s%s.html" % (opts.app_label, opts.object_name.lower(), self.template_name_suffix))
+            names.append("%s/%s%s.html" % (opts.app_label, opts.module_name, self.template_name_suffix))
 
         return names
 
-- 
1.7.9.5

