2021-12-22 18:03:21 +00:00
|
|
|
"""Admin interface classes."""
|
2024-04-15 17:43:22 +00:00
|
|
|
|
2009-07-03 00:23:08 +00:00
|
|
|
from django import forms
|
2021-12-05 14:34:46 +00:00
|
|
|
from django.contrib import admin
|
2021-12-16 11:26:40 +00:00
|
|
|
from django.utils.translation import gettext_lazy as _
|
2010-04-23 15:37:18 +00:00
|
|
|
|
2021-12-05 14:34:46 +00:00
|
|
|
from .base import CategoryBaseAdmin, CategoryBaseAdminForm
|
2012-02-07 18:00:16 +00:00
|
|
|
from .genericcollection import GenericCollectionTabularInline
|
2012-01-11 20:22:29 +00:00
|
|
|
from .models import Category
|
2021-12-05 14:34:46 +00:00
|
|
|
from .settings import JAVASCRIPT_URL, MODEL_REGISTRY, REGISTER_ADMIN, RELATION_MODELS
|
2012-01-11 20:22:29 +00:00
|
|
|
|
2009-07-03 00:23:08 +00:00
|
|
|
|
2009-07-08 13:01:27 +00:00
|
|
|
class NullTreeNodeChoiceField(forms.ModelChoiceField):
|
|
|
|
|
"""A ModelChoiceField for tree nodes."""
|
2021-12-05 14:34:46 +00:00
|
|
|
|
|
|
|
|
def __init__(self, level_indicator="---", *args, **kwargs):
|
2009-07-08 13:01:27 +00:00
|
|
|
self.level_indicator = level_indicator
|
|
|
|
|
super(NullTreeNodeChoiceField, self).__init__(*args, **kwargs)
|
|
|
|
|
|
2021-12-22 18:03:21 +00:00
|
|
|
def label_from_instance(self, obj) -> str:
|
2009-07-08 13:01:27 +00:00
|
|
|
"""
|
2021-12-22 18:03:21 +00:00
|
|
|
Creates labels which represent the tree level of each node when generating option labels.
|
2009-07-08 13:01:27 +00:00
|
|
|
"""
|
2021-12-05 14:34:46 +00:00
|
|
|
return "%s %s" % (self.level_indicator * getattr(obj, obj._mptt_meta.level_attr), obj)
|
2016-02-15 21:47:21 +00:00
|
|
|
|
2016-11-14 18:29:05 +00:00
|
|
|
|
2010-04-23 15:37:18 +00:00
|
|
|
if RELATION_MODELS:
|
2012-02-07 18:00:16 +00:00
|
|
|
from .models import CategoryRelation
|
2010-04-23 15:37:18 +00:00
|
|
|
|
|
|
|
|
class InlineCategoryRelation(GenericCollectionTabularInline):
|
2021-12-22 18:03:21 +00:00
|
|
|
"""The inline admin panel for category relations."""
|
|
|
|
|
|
2010-04-23 15:37:18 +00:00
|
|
|
model = CategoryRelation
|
2009-07-08 13:01:27 +00:00
|
|
|
|
|
|
|
|
|
2012-02-07 12:31:06 +00:00
|
|
|
class CategoryAdminForm(CategoryBaseAdminForm):
|
2021-12-22 18:03:21 +00:00
|
|
|
"""The form for a category in the admin."""
|
|
|
|
|
|
2012-02-07 12:31:06 +00:00
|
|
|
class Meta:
|
|
|
|
|
model = Category
|
2021-12-05 14:34:46 +00:00
|
|
|
fields = "__all__"
|
2012-07-12 23:24:55 +00:00
|
|
|
|
2021-12-22 18:03:21 +00:00
|
|
|
def clean_alternate_title(self) -> str:
|
|
|
|
|
"""Return either the name or alternate title for the category."""
|
2021-12-05 14:34:46 +00:00
|
|
|
if self.instance is None or not self.cleaned_data["alternate_title"]:
|
|
|
|
|
return self.cleaned_data["name"]
|
2012-02-07 12:31:06 +00:00
|
|
|
else:
|
2021-12-05 14:34:46 +00:00
|
|
|
return self.cleaned_data["alternate_title"]
|
2009-07-03 00:23:08 +00:00
|
|
|
|
2012-02-07 12:31:06 +00:00
|
|
|
|
|
|
|
|
class CategoryAdmin(CategoryBaseAdmin):
|
2021-12-22 18:03:21 +00:00
|
|
|
"""Admin for categories."""
|
|
|
|
|
|
2012-02-07 12:31:06 +00:00
|
|
|
form = CategoryAdminForm
|
2021-12-05 14:34:46 +00:00
|
|
|
list_display = ("name", "alternate_title", "active")
|
2012-02-07 12:31:06 +00:00
|
|
|
fieldsets = (
|
2021-12-05 14:34:46 +00:00
|
|
|
(None, {"fields": ("parent", "name", "thumbnail", "active")}),
|
|
|
|
|
(
|
|
|
|
|
_("Meta Data"),
|
|
|
|
|
{
|
|
|
|
|
"fields": ("alternate_title", "alternate_url", "description", "meta_keywords", "meta_extra"),
|
|
|
|
|
"classes": ("collapse",),
|
|
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
_("Advanced"),
|
|
|
|
|
{
|
|
|
|
|
"fields": ("order", "slug"),
|
|
|
|
|
"classes": ("collapse",),
|
|
|
|
|
},
|
|
|
|
|
),
|
2012-02-07 12:31:06 +00:00
|
|
|
)
|
2023-06-16 12:17:09 +00:00
|
|
|
autocomplete_fields = ("parent",)
|
2012-07-12 23:24:55 +00:00
|
|
|
|
2010-04-23 15:37:18 +00:00
|
|
|
if RELATION_MODELS:
|
2021-12-05 14:34:46 +00:00
|
|
|
inlines = [
|
|
|
|
|
InlineCategoryRelation,
|
|
|
|
|
]
|
2012-07-12 23:24:55 +00:00
|
|
|
|
2010-04-23 15:37:18 +00:00
|
|
|
class Media:
|
2021-12-05 14:34:46 +00:00
|
|
|
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)
|
2010-01-28 10:15:52 +00:00
|
|
|
|
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:
|
2021-12-05 14:34:46 +00:00
|
|
|
fieldsets = getattr(modeladmin, "fieldsets", ())
|
|
|
|
|
fields = [cat.split(".")[2] for cat in MODEL_REGISTRY if MODEL_REGISTRY[cat] == model]
|
2011-01-17 15:55:16 +00:00
|
|
|
# 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:
|
2021-12-05 14:34:46 +00:00
|
|
|
if cat in v["fields"]:
|
2011-01-17 15:55:16 +00:00
|
|
|
fields.remove(cat)
|
|
|
|
|
# if there are any fields left, add them under the categories fieldset
|
|
|
|
|
if len(fields) > 0:
|
|
|
|
|
admin.site.unregister(model)
|
2021-12-05 14:34:46 +00:00
|
|
|
admin.site.register(
|
|
|
|
|
model,
|
|
|
|
|
type(
|
|
|
|
|
"newadmin",
|
|
|
|
|
(modeladmin.__class__,),
|
|
|
|
|
{"fieldsets": fieldsets + (("Categories", {"fields": fields}),)},
|
|
|
|
|
),
|
|
|
|
|
)
|