django-categories/categories/admin.py

90 lines
3 KiB
Python
Raw Normal View History

2009-07-03 00:23:08 +00:00
from django.contrib import admin
from django import forms
2012-09-02 14:03:58 +00:00
from django.utils.translation import ugettext_lazy as _
from .genericcollection import GenericCollectionTabularInline
2012-05-16 19:59:58 +00:00
from .settings import RELATION_MODELS, JAVASCRIPT_URL, REGISTER_ADMIN
from .models import Category
from .base import CategoryBaseAdminForm, CategoryBaseAdmin
from .settings import MODEL_REGISTRY
2009-07-03 00:23:08 +00:00
class NullTreeNodeChoiceField(forms.ModelChoiceField):
"""A ModelChoiceField for tree nodes."""
2016-02-10 17:47:30 +00:00
def __init__(self, level_indicator='---', *args, **kwargs):
self.level_indicator = level_indicator
super(NullTreeNodeChoiceField, self).__init__(*args, **kwargs)
def label_from_instance(self, obj):
"""
Creates labels which represent the tree level of each node when
generating option labels.
"""
return '%s %s' % (self.level_indicator * getattr(obj, obj._mptt_meta.level_attr), obj)
2016-11-14 18:29:05 +00:00
if RELATION_MODELS:
from .models import CategoryRelation
class InlineCategoryRelation(GenericCollectionTabularInline):
model = CategoryRelation
class CategoryAdminForm(CategoryBaseAdminForm):
class Meta:
model = Category
fields = '__all__'
2012-07-12 23:24:55 +00:00
def clean_alternate_title(self):
if self.instance is None or not self.cleaned_data['alternate_title']:
return self.cleaned_data['name']
else:
return self.cleaned_data['alternate_title']
2009-07-03 00:23:08 +00:00
class CategoryAdmin(CategoryBaseAdmin):
form = CategoryAdminForm
list_display = ('name', 'alternate_title', 'active')
fieldsets = (
(None, {
'fields': ('parent', 'name', 'thumbnail', 'active')
}),
2012-09-02 14:03:58 +00:00
(_('Meta Data'), {
2012-07-12 23:24:55 +00:00
'fields': ('alternate_title', 'alternate_url', 'description',
'meta_keywords', 'meta_extra'),
'classes': ('collapse',),
}),
2012-09-02 14:03:58 +00:00
(_('Advanced'), {
'fields': ('order', 'slug'),
'classes': ('collapse',),
}),
)
2012-07-12 23:24:55 +00:00
if RELATION_MODELS:
2012-07-12 23:24:55 +00:00
inlines = [InlineCategoryRelation, ]
class Media:
js = (JAVASCRIPT_URL + 'genericcollections.js',)
2009-07-03 00:23:08 +00:00
2016-11-14 18:29:05 +00:00
2012-05-16 19:59:58 +00:00
if REGISTER_ADMIN:
2012-05-16 13:41:10 +00:00
admin.site.register(Category, CategoryAdmin)
2016-02-10 17:47:30 +00:00
for model, modeladmin in list(admin.site._registry.items()):
if model in list(MODEL_REGISTRY.values()) and modeladmin.fieldsets:
fieldsets = getattr(modeladmin, 'fieldsets', ())
fields = [cat.split('.')[2] for cat in MODEL_REGISTRY if MODEL_REGISTRY[cat] == model]
# check each field to see if already defined
for cat in fields:
2011-08-19 14:04:39 +00:00
for k, v in fieldsets:
if cat in v['fields']:
fields.remove(cat)
# if there are any fields left, add them under the categories fieldset
if len(fields) > 0:
admin.site.unregister(model)
admin.site.register(model, type('newadmin', (modeladmin.__class__,), {
'fieldsets': fieldsets + (('Categories', {
'fields': fields
}),)
2011-05-03 14:41:56 +00:00
}))