attempt at hacking a through table (field errors)

This commit is contained in:
Justin Quick 2010-02-02 10:40:51 -05:00
parent 486ffec34f
commit 0ca025d763
5 changed files with 34 additions and 24 deletions

View file

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

View file

@ -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__,), {}))
admin.site.register(model, type('newadmin', (modeladmin.__class__,), {
'fieldsets': modeladmin.fieldsets + (('Categories',{
'fields': ('category','categories'),
}),)
}))

View file

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

View file

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

View file

@ -1,12 +0,0 @@
{% 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 %}