mirror of
https://github.com/jazzband/django-categories.git
synced 2026-03-16 22:30:24 +00:00
attempt at hacking a through table (field errors)
This commit is contained in:
parent
486ffec34f
commit
0ca025d763
5 changed files with 34 additions and 24 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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'),
|
||||
}),)
|
||||
}))
|
||||
|
|
@ -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)
|
||||
|
|
@ -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))
|
||||
|
|
@ -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 %}
|
||||
Loading…
Reference in a new issue