Django

Code

Changeset 2278

Show
Ignore:
Timestamp:
02/04/06 18:03:12 (3 years ago)
Author:
lukeplant
Message:

magic-removal: elimated 'module._MODELS' and replaced with a register function,
so that setting 'app_label' is all that's needed for models in different files.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/branches/magic-removal/django/contrib/admin/views/doc.py

    r2211 r2278  
    152152        raise Http404, "App %r not found" % app_label 
    153153    model = None 
    154     for m in app_mod._MODELS
     154    for m in models.get_models(app_mod)
    155155        if m._meta.object_name.lower() == model_name: 
    156156            model = m 
  • django/branches/magic-removal/django/core/management.py

    r2273 r2278  
    439439    output.append('{%% if perms.%s %%}' % app_label) 
    440440    output.append('<div class="module"><h2>%s</h2><table>' % app_label.title()) 
    441     for klass in mod._MODELS
     441    for klass in app_models
    442442        if klass._meta.admin: 
    443443            output.append(MODULE_TEMPLATE % { 
  • django/branches/magic-removal/django/db/models/base.py

    r2277 r2278  
    88from django.db import connection, backend 
    99from django.db.models import signals 
     10from django.db.models.loading import register_models 
    1011from django.dispatch import dispatcher 
    1112from django.core.exceptions import ObjectDoesNotExist 
     
    4748        new_class._prepare() 
    4849 
    49         # Populate the _MODELS member on the module the class is in. 
    50         model_module.__dict__.setdefault('_MODELS', []).append(new_class) 
     50        register_models(new_class._meta.app_label, new_class) 
    5151        return new_class 
    5252 
  • django/branches/magic-removal/django/db/models/loading.py

    r2277 r2278  
    77 
    88_app_list = None # Cache of installed apps. 
     9_app_models = {} # Dictionary of models against app module name 
    910 
    1011def get_apps(): 
     
    3435    """ 
    3536    if app_mod: 
    36         return getattr(app_mod, '_MODELS', ()) 
     37        return _app_models.get(app_mod.__name__.split('.')[-2], ()) 
    3738    else: 
    3839        model_list = [] 
    3940        for app_mod in get_apps(): 
    40             model_list.extend(getattr(app_mod, '_MODELS', ())) 
     41            model_list.extend(get_models(app_mod)) 
    4142        return model_list 
    4243 
     
    5253                return model 
    5354 
    54 def register_models(app_mod, *models): 
     55def register_models(app_label, *models): 
    5556    """ 
    56     Use this from an app's models.py module to register imported Model classes 
    57     as belonging to the app. e.g.: 
    58      
    59     register_models(sys.modules[__name__], Article, Reporter) 
     57    Register a set of models as belonging to an app. 
    6058    """ 
    61     if not hasattr(app_mod, '_MODELS'): 
    62         app_mod._MODELS = [] 
    63     app_mod._MODELS.extend(models) 
     59    _app_models.setdefault(app_label, []).extend(models) 
  • django/branches/magic-removal/django/db/models/options.py

    r2277 r2278  
    168168            objects = [] 
    169169            # TODO 
    170             #for klass in get_app(self.app_label)._MODELS
     170            #for klass in get_models(get_app(self.app_label))
    171171            #    opts = klass._meta 
    172172            #    if opts.order_with_respect_to and opts.order_with_respect_to.rel \ 
  • django/branches/magic-removal/tests/runtests.py

    r2253 r2278  
    22 
    33import os, re, sys, time, traceback 
     4import django.db.models 
    45 
    56# doctest is included in the same package as this module, because this testing 
     
    143144            # Run the API tests. 
    144145            p = doctest.DocTestParser() 
    145             test_namespace = dict([(m._meta.object_name, m) for m in mod._MODELS]) 
     146            test_namespace = dict([(m._meta.object_name, m) \ 
     147                                    for m in django.db.models.get_models(mod)]) 
    146148            dtest = p.get_doctest(mod.API_TESTS, test_namespace, model_name, None, None) 
    147149            # Manually set verbose=False, because "-v" command-line parameter