From f58a55d3363e7501c55136751fd270717b3662e6 Mon Sep 17 00:00:00 2001 From: Enver Bisevac Date: Wed, 1 Jan 2014 09:38:33 +0100 Subject: [PATCH 1/6] registry fieldsets in admin panel --- categories/admin.py | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/categories/admin.py b/categories/admin.py index 1255c916..d7f436c6 100644 --- a/categories/admin.py +++ b/categories/admin.py @@ -6,7 +6,7 @@ from .settings import RELATION_MODELS, JAVASCRIPT_URL, REGISTER_ADMIN from .models import Category from .base import CategoryBaseAdminForm, CategoryBaseAdmin -from .settings import MODEL_REGISTRY +from .settings import MODEL_REGISTRY, FIELD_REGISTRY class NullTreeNodeChoiceField(forms.ModelChoiceField): @@ -67,20 +67,23 @@ class Media: if REGISTER_ADMIN: admin.site.register(Category, CategoryAdmin) +model_regs = [] +for key, value in MODEL_REGISTRY.items(): + for model in value: + model_regs.append(model) + for model, modeladmin in admin.site._registry.items(): - if model in 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: - for k, v in fieldsets: - if cat in v['fields']: - fields.remove(cat) + if model in model_regs and modeladmin.fieldsets: + fieldsets = tuple(getattr(modeladmin, 'fieldsets', ())) + fields = [cat.split('.')[2] for cat in FIELD_REGISTRY if model in MODEL_REGISTRY[cat.split('.')[0]]] + # 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 + fieldsets += (('Categories', { + 'fields': tuple(fields) }),) + + admin.site.register(model, type('newadmin', (modeladmin.__class__,), { + 'fieldsets': fieldsets })) From 7eec3aa071e9c73fe635e6c8426dd49040195680 Mon Sep 17 00:00:00 2001 From: Enver Bisevac Date: Mon, 6 Jan 2014 00:18:27 +0100 Subject: [PATCH 2/6] small feature for adding special function in reps ponse if arg is tree=1 then call customised javascript function, good for custom TreeWidget --- categories/base.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/categories/base.py b/categories/base.py index 89b96118..3c644f96 100644 --- a/categories/base.py +++ b/categories/base.py @@ -4,10 +4,12 @@ """ from django.contrib import admin +from django.http import HttpResponse from django.db import models from django import forms from django.utils.encoding import force_unicode from django.utils.translation import ugettext as _ +from django.utils.html import escape from mptt.models import MPTTModel from mptt.fields import TreeForeignKey @@ -128,6 +130,17 @@ class CategoryBaseAdmin(TreeEditor, admin.ModelAdmin): actions = ['activate', 'deactivate'] + def response_add(self, request, obj, post_url_continue='../%s/'): + """ + Overriding to force the widget to update tree in customized function + this function dismissAddAnotherPopupTree should be specified in change_form.html (extrahead block) + """ + resp = super(CategoryBaseAdmin, self).response_add(request, obj, post_url_continue) + if request.POST.has_key("_popup") and request.GET.has_key("tree"): + return HttpResponse('' % \ + (escape(obj._get_pk_val()), escape(obj.short_title), escape(obj.parent.pk) if obj.parent is not None else "")) + return resp + def get_actions(self, request): actions = super(CategoryBaseAdmin, self).get_actions(request) if 'delete_selected' in actions: From 006ecbeadad1d63278af0fc0d6455edf450d44e6 Mon Sep 17 00:00:00 2001 From: Mirza Delic Date: Thu, 16 Oct 2014 18:00:42 +0200 Subject: [PATCH 3/6] fix --- categories/models.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/categories/models.py b/categories/models.py index 40482186..7f7c9068 100644 --- a/categories/models.py +++ b/categories/models.py @@ -57,6 +57,16 @@ def get_absolute_url(self): ancestors = list(self.get_ancestors()) + [self, ] return prefix + '/'.join([force_unicode(i.slug) for i in ancestors]) + '/' + # for ads + def get_ads_url(self): + return reverse('category-ads', args=[self.parent.slug, self.slug]) + + # for ads + def get_parent_list_url(self): + if self.parent: + return reverse('category-list', args=[self.parent.slug]) + return reverse('category-list', args=[self.slug]) + if RELATION_MODELS: def get_related_content_type(self, content_type): """ From 3ce4696956c474d212defc4d1f415dc040e52d55 Mon Sep 17 00:00:00 2001 From: Enver Bisevac Date: Mon, 12 Jan 2015 10:00:36 +0100 Subject: [PATCH 4/6] deeding 1.7 warning --- categories/editor/tree_editor.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/categories/editor/tree_editor.py b/categories/editor/tree_editor.py index 87855e70..cd2e30ea 100644 --- a/categories/editor/tree_editor.py +++ b/categories/editor/tree_editor.py @@ -80,8 +80,8 @@ def get_ordering(self, request=None, queryset=None): else: return [] - def get_query_set(self, *args, **kwargs): - qs = super(TreeChangeList, self).get_query_set(*args, **kwargs).order_by('tree_id', 'lft') + def get_queryset(self, *args, **kwargs): + qs = super(TreeChangeList, self).get_queryset(*args, **kwargs).order_by('tree_id', 'lft') return qs @@ -171,7 +171,7 @@ def old_changelist_view(self, request, extra_context=None): # Try to look up an action first, but if this isn't an action the POST # will fall through to the bulk edit check, below. if actions and request.method == 'POST': - response = self.response_action(request, queryset=cl.get_query_set()) + response = self.response_action(request, queryset=cl.get_queryset()) if response: return response @@ -281,6 +281,6 @@ def queryset(self, request): Returns a QuerySet of all model instances that can be edited by the admin site. This is used by changelist_view. """ - qs = self.model._default_manager.get_query_set() + qs = self.model._default_manager.get_queryset() qs.__class__ = TreeEditorQuerySet return qs From dcbc8f8798bf1eea1f241584a3f7d0fb2c8ff9eb Mon Sep 17 00:00:00 2001 From: Enver Bisevac Date: Mon, 12 Jan 2015 15:54:06 +0100 Subject: [PATCH 5/6] removed warnings for 1.8 --- categories/admin.py | 1 + categories/base.py | 3 +++ categories/editor/tree_editor.py | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/categories/admin.py b/categories/admin.py index d7f436c6..7d66ebfa 100644 --- a/categories/admin.py +++ b/categories/admin.py @@ -32,6 +32,7 @@ class InlineCategoryRelation(GenericCollectionTabularInline): class CategoryAdminForm(CategoryBaseAdminForm): class Meta: model = Category + fields = "__all__" def clean_alternate_title(self): if self.instance is None or not self.cleaned_data['alternate_title']: diff --git a/categories/base.py b/categories/base.py index 3c644f96..02b6d1ee 100644 --- a/categories/base.py +++ b/categories/base.py @@ -121,6 +121,9 @@ def clean(self): "item to a descendant.")) return self.cleaned_data + class Meta: + fields = "__all__" + class CategoryBaseAdmin(TreeEditor, admin.ModelAdmin): form = CategoryBaseAdminForm diff --git a/categories/editor/tree_editor.py b/categories/editor/tree_editor.py index cd2e30ea..576863c9 100644 --- a/categories/editor/tree_editor.py +++ b/categories/editor/tree_editor.py @@ -276,7 +276,7 @@ def changelist_view(self, request, extra_context=None, *args, **kwargs): else: return self.old_changelist_view(request, extra_context) - def queryset(self, request): + def get_queryset(self, request): """ Returns a QuerySet of all model instances that can be edited by the admin site. This is used by changelist_view. From 1bf278312b13083194a77f463736a509f3640e8b Mon Sep 17 00:00:00 2001 From: Enver Bisevac Date: Sun, 29 Mar 2015 23:17:29 +0200 Subject: [PATCH 6/6] model translation making problems with '__all__' --- categories/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/categories/base.py b/categories/base.py index 02b6d1ee..c37e6e7e 100644 --- a/categories/base.py +++ b/categories/base.py @@ -122,7 +122,7 @@ def clean(self): return self.cleaned_data class Meta: - fields = "__all__" + exclude = [] class CategoryBaseAdmin(TreeEditor, admin.ModelAdmin):