From c4c1b30aeece9e67acfbc85468b995972b4cefc6 Mon Sep 17 00:00:00 2001 From: Justin Quick Date: Thu, 28 Jan 2010 05:15:52 -0500 Subject: [PATCH] added registry, hacked admin w/ new templates for category editor --- categories/__init__.py | 29 +++++++++++++++++++ categories/admin.py | 10 +++++++ .../admin/categories/change_form.html | 12 ++++++++ 3 files changed, 51 insertions(+) create mode 100644 categories/templates/admin/categories/change_form.html diff --git a/categories/__init__.py b/categories/__init__.py index e69de29..602831e 100644 --- a/categories/__init__.py +++ b/categories/__init__.py @@ -0,0 +1,29 @@ +import fields +import models + +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) + +def register_fk(model, field_name='category', extra_params={}): + return _register(model, field_name, extra_params, fields.CategoryFKField) + +def _register(model, field_name, extra_params={}, field=fields.CategoryFKField): + if model in registry: + raise AlreadyRegistered('The model %s has already been registered.' % model.__name__) + registry.append(model) + + opts = model._meta + try: + opts.get_field(field_name) + except FieldDoesNotExist: + field(**extra_params).contribute_to_class(model, field_name) \ No newline at end of file diff --git a/categories/admin.py b/categories/admin.py index 7965665..d2c1d69 100644 --- a/categories/admin.py +++ b/categories/admin.py @@ -5,6 +5,7 @@ from django.template.defaultfilters import slugify from mptt.forms import TreeNodeChoiceField from editor.tree_editor import TreeEditor from settings import ALLOW_SLUG_CHANGE +from categories import registry class NullTreeNodeChoiceField(forms.ModelChoiceField): """A ModelChoiceField for tree nodes.""" @@ -67,3 +68,12 @@ class CategoryAdmin(TreeEditor, admin.ModelAdmin): admin.site.register(Category, CategoryAdmin) + + +class CategorizedAdmin(admin.ModelAdmin): + change_form_template = 'admin/categories/change_form.html' + +for model,modeladmin in admin.site._registry.items(): + if model in registry: + admin.site.unregister(model) + admin.site.register(model, type('newadmin', (CategorizedAdmin, modeladmin.__class__,), {})) \ No newline at end of file diff --git a/categories/templates/admin/categories/change_form.html b/categories/templates/admin/categories/change_form.html new file mode 100644 index 0000000..d1703d2 --- /dev/null +++ b/categories/templates/admin/categories/change_form.html @@ -0,0 +1,12 @@ +{% extends 'admin/change_form.html' %} + +{% block after_field_sets %} +
+

Categories

+
+ + +

this is where the category editor goes.

+
+
+{% endblock %} \ No newline at end of file