added registry, hacked admin w/ new templates for category editor

This commit is contained in:
Justin Quick 2010-01-28 05:15:52 -05:00
parent 7a0d43732a
commit c4c1b30aee
3 changed files with 51 additions and 0 deletions

View file

@ -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)

View file

@ -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__,), {}))

View file

@ -0,0 +1,12 @@
{% extends 'admin/change_form.html' %}
{% block after_field_sets %}
<fieldset class="module aligned collapse">
<h2>Categories</h2>
<div class="form-row" id="categories">
<label for="categories-input">Edit Categories:</label>
<select id="categories-input"></select>
<p class="help">this is where the category editor goes.</p>
</div>
</fieldset>
{% endblock %}