Skip to content

Commit

Permalink
attempt at hacking a through table (field errors)
Browse files Browse the repository at this point in the history
  • Loading branch information
justquick committed Feb 2, 2010
1 parent 486ffec commit 0ca025d
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 24 deletions.
7 changes: 3 additions & 4 deletions categories/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import fields
import models

from django.db.models import FieldDoesNotExist

Expand All @@ -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)
Expand All @@ -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)
Expand Down
14 changes: 7 additions & 7 deletions categories/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,19 +61,19 @@ def clean(self):


class CategoryAdmin(TreeEditor, admin.ModelAdmin):
form=CategoryAdminForm
form = CategoryAdminForm
list_display = ('__unicode__',)
search_fields = (('name',))
prepopulated_fields = {'slug': ('name',)}


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__,), {}))
admin.site.register(model, type('newadmin', (modeladmin.__class__,), {
'fieldsets': modeladmin.fieldsets + (('Categories',{
'fields': ('category','categories'),
}),)
}))
3 changes: 2 additions & 1 deletion categories/fields.py
Original file line number Diff line number Diff line change
@@ -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)
22 changes: 22 additions & 0 deletions categories/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,25 @@ def __unicode__(self):
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))
12 changes: 0 additions & 12 deletions categories/templates/admin/categories/change_form.html

This file was deleted.

0 comments on commit 0ca025d

Please sign in to comment.