Django

Code

Changeset 4307

Show
Ignore:
Timestamp:
01/12/07 09:15:05 (2 years ago)
Author:
jacob
Message:

Fixed #1717: ContentType?.objects.get_for_manager() is now cached for a small performance gain when dealing with content-types regularly. Thanks, Dave St.Germain.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/django/contrib/contenttypes/models.py

    r4265 r4307  
    22from django.utils.translation import gettext_lazy as _ 
    33 
     4CONTENT_TYPE_CACHE = {} 
    45class ContentTypeManager(models.Manager): 
    56    def get_for_model(self, model): 
     
    910        """ 
    1011        opts = model._meta 
    11         # The str() is needed around opts.verbose_name because it's a 
    12         # django.utils.functional.__proxy__ object. 
    13         ct, created = self.model._default_manager.get_or_create(app_label=opts.app_label, 
    14             model=opts.object_name.lower(), defaults={'name': str(opts.verbose_name)}) 
     12        key = (opts.app_label, opts.object_name.lower()) 
     13        try: 
     14            ct = CONTENT_TYPE_CACHE[key] 
     15        except KeyError: 
     16            # The str() is needed around opts.verbose_name because it's a 
     17            # django.utils.functional.__proxy__ object. 
     18            ct, created = self.model._default_manager.get_or_create(app_label=key[0], 
     19                model=key[1], defaults={'name': str(opts.verbose_name)}) 
     20            CONTENT_TYPE_CACHE[key] = ct 
    1521        return ct 
    1622