mirror of
https://github.com/jazzband/django-categories.git
synced 2026-03-16 22:30:24 +00:00
Refactored the registry into a registry of models and fields. This will make it easier for migrations.
This commit is contained in:
parent
28bb8e53fd
commit
7e83b12a41
2 changed files with 24 additions and 9 deletions
|
|
@ -17,7 +17,8 @@ def get_version():
|
|||
|
||||
__version__ = get_version()
|
||||
|
||||
registry = {}
|
||||
field_registry = {}
|
||||
model_registry = {}
|
||||
|
||||
try:
|
||||
import fields
|
||||
|
|
@ -30,7 +31,16 @@ try:
|
|||
"""
|
||||
pass
|
||||
|
||||
registry = {}
|
||||
# The field registry keeps track of the individual fields created.
|
||||
# {'app.model.field': Field(**extra_params)}
|
||||
# Useful for doing a schema migration
|
||||
field_registry = {}
|
||||
|
||||
# The model registry keeps track of which models have one or more fields
|
||||
# registered.
|
||||
# {'app': [model1, model2]}
|
||||
# Useful for admin alteration
|
||||
model_registry = {}
|
||||
|
||||
def register_m2m(model, field_name='categories', extra_params={}):
|
||||
return _register(model, field_name, extra_params, fields.CategoryM2MField)
|
||||
|
|
@ -39,16 +49,21 @@ try:
|
|||
return _register(model, field_name, extra_params, fields.CategoryFKField)
|
||||
|
||||
def _register(model, field_name, extra_params={}, field=fields.CategoryFKField):
|
||||
registry_name = "%s.%s" % (model.__name__, field_name)
|
||||
app_label = model._meta.app_label
|
||||
registry_name = ".".join((app_label, model.__name__, field_name)).lower()
|
||||
|
||||
if registry_name in registry:
|
||||
if registry_name in field_registry:
|
||||
return #raise AlreadyRegistered
|
||||
registry[registry_name] = model
|
||||
opts = model._meta
|
||||
try:
|
||||
opts.get_field(field_name)
|
||||
except FieldDoesNotExist:
|
||||
field(**extra_params).contribute_to_class(model, field_name)
|
||||
if app_label not in model_registry:
|
||||
model_registry[app_label] = []
|
||||
if model not in model_registry[app_label]:
|
||||
model_registry[app_label].append(model)
|
||||
field_registry[registry_name] = field(**extra_params)
|
||||
field_registry[registry_name].contribute_to_class(model, field_name)
|
||||
|
||||
from categories import settings
|
||||
from django.core.exceptions import ImproperlyConfigured
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ from editor.tree_editor import TreeEditor
|
|||
from genericcollection import GenericCollectionTabularInline
|
||||
|
||||
from settings import ALLOW_SLUG_CHANGE, RELATION_MODELS
|
||||
from categories import registry
|
||||
from categories import model_registry
|
||||
from models import Category
|
||||
|
||||
class NullTreeNodeChoiceField(forms.ModelChoiceField):
|
||||
|
|
@ -102,9 +102,9 @@ class CategoryAdmin(TreeEditor, admin.ModelAdmin):
|
|||
admin.site.register(Category, CategoryAdmin)
|
||||
|
||||
for model, modeladmin in admin.site._registry.items():
|
||||
if model in registry.values() and modeladmin.fieldsets:
|
||||
if model in model_registry.values() and modeladmin.fieldsets:
|
||||
fieldsets = getattr(modeladmin, 'fieldsets', ())
|
||||
fields = [cat.split('.')[1] for cat in registry if registry[cat] == model]
|
||||
fields = [cat.split('.')[2] for cat in model_registry if model_registry[cat] == model]
|
||||
# check each field to see if already defined
|
||||
for cat in fields:
|
||||
for k,v in fieldsets:
|
||||
|
|
|
|||
Loading…
Reference in a new issue