From 0ca025d76374816feba61351e4b9f20276414563 Mon Sep 17 00:00:00 2001 From: Justin Quick Date: Tue, 2 Feb 2010 10:40:51 -0500 Subject: [PATCH] attempt at hacking a through table (field errors) --- categories/__init__.py | 7 +++--- categories/admin.py | 14 ++++++------ categories/fields.py | 3 ++- categories/models.py | 22 +++++++++++++++++++ .../admin/categories/change_form.html | 12 ---------- 5 files changed, 34 insertions(+), 24 deletions(-) delete mode 100644 categories/templates/admin/categories/change_form.html diff --git a/categories/__init__.py b/categories/__init__.py index 151ed00..9b63242 100644 --- a/categories/__init__.py +++ b/categories/__init__.py @@ -1,5 +1,4 @@ import fields -import models from django.db.models import FieldDoesNotExist @@ -9,7 +8,7 @@ class AlreadyRegistered(Exception): """ pass -registry = [] +registry = {} def register_m2m(model, field_name='categories', extra_params={}): return _register(model, field_name, extra_params, fields.CategoryM2MField) @@ -20,8 +19,8 @@ def register_fk(model, field_name='category', extra_params={}): def _register(model, field_name, extra_params={}, field=fields.CategoryFKField): registry_name = "%s.%s" % (model.__name__, field_name) if registry_name in registry: - return - registry.append(registry_name) + raise AlreadyRegistered + registry[registry_name] = model opts = model._meta try: opts.get_field(field_name) diff --git a/categories/admin.py b/categories/admin.py index d2c1d69..460974e 100644 --- a/categories/admin.py +++ b/categories/admin.py @@ -61,7 +61,7 @@ class CategoryAdminForm(forms.ModelForm): class CategoryAdmin(TreeEditor, admin.ModelAdmin): - form=CategoryAdminForm + form = CategoryAdminForm list_display = ('__unicode__',) search_fields = (('name',)) prepopulated_fields = {'slug': ('name',)} @@ -69,11 +69,11 @@ 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: + if model in registry.values(): admin.site.unregister(model) - admin.site.register(model, type('newadmin', (CategorizedAdmin, modeladmin.__class__,), {})) \ No newline at end of file + admin.site.register(model, type('newadmin', (modeladmin.__class__,), { + 'fieldsets': modeladmin.fieldsets + (('Categories',{ + 'fields': ('category','categories'), + }),) + })) \ No newline at end of file diff --git a/categories/fields.py b/categories/fields.py index fde87ca..7d64a47 100644 --- a/categories/fields.py +++ b/categories/fields.py @@ -1,11 +1,12 @@ from django.db.models import ForeignKey, ManyToManyField -from categories.models import Category class CategoryM2MField(ManyToManyField): def __init__(self, **kwargs): + from categories.models import Category super(CategoryM2MField, self).__init__(to=Category, **kwargs) class CategoryFKField(ForeignKey): def __init__(self, **kwargs): + from categories.models import Category super(CategoryFKField, self).__init__(to=Category, **kwargs) \ No newline at end of file diff --git a/categories/models.py b/categories/models.py index 2761521..7e0d472 100644 --- a/categories/models.py +++ b/categories/models.py @@ -33,3 +33,25 @@ class Category(models.Model): return ' > '.join([force_unicode(i.name) for i in ancestors]+[self.name,]) mptt.register(Category, order_insertion_by=['name']) + + +class CategoryIntermediary(models.Model): + category = models.ForeignKey(Category) + is_primary = models.BooleanField(default=False) + + class Meta: + abstract = True + +from categories import registry +from django.contrib import admin + +for model in registry.values(): + field_name = model._meta.verbose_name.lower() + class_name = str('%sCategories' % model._meta.verbose_name.title()) + attrs = { + 'category': models.ForeignKey(Category), + 'is_primary': models.BooleanField(default=False), + '__module__': model.__dict__['__module__'], + field_name: models.ForeignKey(model), + } + admin.site.register(type(class_name, (models.Model,), attrs)) \ No newline at end of file diff --git a/categories/templates/admin/categories/change_form.html b/categories/templates/admin/categories/change_form.html deleted file mode 100644 index d1703d2..0000000 --- a/categories/templates/admin/categories/change_form.html +++ /dev/null @@ -1,12 +0,0 @@ -{% extends 'admin/change_form.html' %} - -{% block after_field_sets %} -
-

Categories

-
- - -

this is where the category editor goes.

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