Enable registering of models in settings.

This commit is contained in:
Corey Oordt 2011-05-16 08:56:01 -04:00
parent 7474cb0e51
commit 4e8f490714

View file

@ -21,17 +21,17 @@ registry = {}
try:
import fields
from django.db.models import FieldDoesNotExist
class AlreadyRegistered(Exception):
"""
An attempt was made to register a model more than once.
"""
pass
registry = {}
def register_m2m(model, field_name='categories', extra_params={}):
return _register(model, field_name, extra_params, fields.CategoryM2MField)
@ -40,6 +40,7 @@ try:
def _register(model, field_name, extra_params={}, field=fields.CategoryFKField):
registry_name = "%s.%s" % (model.__name__, field_name)
if registry_name in registry:
return #raise AlreadyRegistered
registry[registry_name] = model
@ -48,5 +49,51 @@ try:
opts.get_field(field_name)
except FieldDoesNotExist:
field(**extra_params).contribute_to_class(model, field_name)
from categories import settings
from django.core.exceptions import ImproperlyConfigured
from django.db.models import get_model
for key, value in settings.FK_REGISTRY.items():
model = get_model(*key.split('.'))
if model is None:
raise ImproperlyConfigured('%s is not a model' % key)
if isinstance(value, (tuple, list)):
for item in value:
if isinstance(item, basestring):
register_fk(model, item)
elif isinstance(item, dict):
field_name = item.pop('name')
register_fk(model, field_name, extra_params=item)
else:
raise ImproperlyConfigured("CATEGORY_SETTINGS['FK_REGISTRY'] doesn't recognize the value of %s" % key)
elif isinstance(value, basestring):
register_fk(model, value)
elif isinstance(item, dict):
field_name = item.pop('name')
register_fk(model, field_name, extra_params=item)
else:
raise ImproperlyConfigured("CATEGORY_SETTINGS['FK_REGISTRY'] doesn't recognize the value of %s" % key)
for key, value in settings.M2M_REGISTRY.items():
model = get_model(*key.split('.'))
if model is None:
raise ImproperlyConfigured('%s is not a model' % key)
if isinstance(value, (tuple, list)):
for item in value:
if isinstance(item, basestring):
register_m2m(model, item)
elif isinstance(item, dict):
field_name = item.pop('name')
register_m2m(model, field_name, extra_params=item)
else:
raise ImproperlyConfigured("CATEGORY_SETTINGS['M2M_REGISTRY'] doesn't recognize the value of %s: %s" % (key, item))
elif isinstance(value, basestring):
register_m2m(model, value)
elif isinstance(value, dict):
field_name = value.pop('name')
register_m2m(model, field_name, extra_params=value)
else:
raise ImproperlyConfigured("CATEGORY_SETTINGS['M2M_REGISTRY'] doesn't recognize the value of %s" % key)
except ImportError:
pass