library: initialize the content-type mapping lazily

This is required for Django 1.7 as the contenttypes application is not
initialized properly when the cell data models are loaded and added to
the registry.
This commit is contained in:
Frédéric Péters 2015-01-03 00:36:57 +01:00
parent 2534f36acd
commit db192efede
1 changed files with 11 additions and 5 deletions

View File

@ -21,17 +21,23 @@ class Library(object):
providing page cells."""
def __init__(self):
self.classes = {}
self.classes = []
self.classes_by_content_id = None
def get_cell_classes(self):
return self.classes.values()
return self.classes
def get_cell_class(self, content_type_id):
return self.classes[int(content_type_id)]
if self.classes_by_content_id is None:
# initialize the dictionary
self.classes_by_content_id = {}
for klass in self.classes:
content_type = ContentType.objects.get_for_model(klass)
self.classes_by_content_id[content_type.id] = klass
return self.classes_by_content_id[int(content_type_id)]
def register_cell_class(self, klass):
content_type = ContentType.objects.get_for_model(klass)
self.classes[content_type.id] = klass
self.classes.append(klass)
return klass