Skip to content

Commit

Permalink
Fixed #1796 -- only load a single copy of each model, even when it is
Browse files Browse the repository at this point in the history
referenced via different import paths. Solves a problem with many-to-many
relations being set up incorrectly. Thanks to Curtis Thompson, Luke Plant and
Simon Willison for some excellent debugging of the problem. Refs #2232 (may
also have fixed that).


git-svn-id: http://code.djangoproject.com/svn/django/trunk@3202 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information
malcolmt committed Jun 25, 2006
1 parent 23c24fc commit fd702fe
Showing 1 changed file with 12 additions and 0 deletions.
12 changes: 12 additions & 0 deletions django/db/models/loading.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

from django.conf import settings
from django.core.exceptions import ImproperlyConfigured
import sys
import os

__all__ = ('get_apps', 'get_app', 'get_models', 'get_model', 'register_models')

Expand Down Expand Up @@ -91,4 +93,14 @@ def register_models(app_label, *models):
# in the _app_models dictionary
model_name = model._meta.object_name.lower()
model_dict = _app_models.setdefault(app_label, {})
if model_dict.has_key(model_name):
# The same model may be imported via different paths (e.g.
# appname.models and project.appname.models). We use the source
# filename as a means to detect identity.
fname1 = os.path.normpath(sys.modules[model.__module__].__file__)
fname2 = os.path.normpath(sys.modules[model_dict[model_name].__module__].__file__)
# Since the filename extension could be .py the first time and .pyc
# or .pyo the second time, ignore the extension when comparing.
if os.path.splitext(fname1)[0] == os.path.splitext(fname2)[0]:
continue
model_dict[model_name] = model

0 comments on commit fd702fe

Please sign in to comment.