diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-02-18 18:11:05 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-02-18 18:11:05 +0100 |
commit | 6f9cdeb9ad2498a2916c8a263056e3424b86b949 (patch) | |
tree | 11f7e01203e2a510b8f75f12601c5b174ef629ad | |
parent | c255b30707aae7811dc5391c1615b9021a077352 (diff) | |
download | Chimère-6f9cdeb9ad2498a2916c8a263056e3424b86b949.tar.bz2 Chimère-6f9cdeb9ad2498a2916c8a263056e3424b86b949.zip |
Limit moderation by category: improve category filtering on admin - display only category relevant on the add / modify form
-rw-r--r-- | chimere/admin.py | 35 | ||||
-rw-r--r-- | chimere/forms.py | 2 |
2 files changed, 36 insertions, 1 deletions
diff --git a/chimere/admin.py b/chimere/admin.py index fb3b15c..686a656 100644 --- a/chimere/admin.py +++ b/chimere/admin.py @@ -186,12 +186,14 @@ class PictureInline(admin.TabularInline): readonly_fields = ('height', 'width') exclude = ('thumbnailfile', 'thumbnailfile_height', 'thumbnailfile_width') + class MultimediaInline(admin.TabularInline): model = MultimediaFile extra = 1 ordering = ('order',) form = MultimediaFileAdminForm + class AreaMarkerListFilter(admin.SimpleListFilter): title = _('area') parameter_name = 'area' @@ -206,6 +208,7 @@ class AreaMarkerListFilter(admin.SimpleListFilter): return queryset return queryset.filter(area.getIncludeMarker()) + class AreaRouteListFilter(AreaMarkerListFilter): def queryset(self, request, queryset): try: @@ -214,6 +217,7 @@ class AreaRouteListFilter(AreaMarkerListFilter): return queryset return queryset.filter(area.getIncludeRoute()) + class HasCategoriesListFilter(SimpleListFilter): title = _('Has categories') parameter_name = 'has_category' @@ -232,6 +236,24 @@ class HasCategoriesListFilter(SimpleListFilter): return queryset +class CategoriesListFilter(SimpleListFilter): + title = _('categories') + parameter_name = 'category' + + def lookups(self, request, model_admin): + if request.user.subcategory_limit_to.count(): + q = request.user.subcategory_limit_to + return [(l.subcategory.pk, unicode(l.subcategory)) + for l in q.all()] + q = SubCategory.objects + return [(cat.pk, unicode(cat)) for cat in q.all()] + + def queryset(self, request, queryset): + if self.value(): + return queryset.filter(categories__pk=self.value()) + return queryset + + def moderator_right(user, qs, geo_type='marker'): if user.is_superuser: return qs @@ -256,7 +278,7 @@ class MarkerAdmin(admin.ModelAdmin): """ search_fields = ("name",) list_display = ('name', 'status', 'start_date', 'end_date') - list_filter = ('status', AreaMarkerListFilter, 'categories', + list_filter = ('status', AreaMarkerListFilter, CategoriesListFilter, HasCategoriesListFilter, 'start_date', 'end_date') actions = [validate, disable, managed_modified, export_to_kml, export_to_shapefile, export_to_csv] @@ -325,6 +347,17 @@ class MarkerAdmin(admin.ModelAdmin): ) return my_urls + urls + def get_form(self, request, obj=None, **kwargs): + form = super(MarkerAdmin, self).get_form(request, obj, **kwargs) + q = request.user.subcategory_limit_to + if not q.count(): + return form + form = type('MarkerAdminLimit', (form,), + {'categories_choices': [ + (l.subcategory.pk, unicode(l.subcategory)) + for l in q.all()]}) + return form + class RouteAdmin(MarkerAdmin): """ diff --git a/chimere/forms.py b/chimere/forms.py index 4744dd2..2cfa0ed 100644 --- a/chimere/forms.py +++ b/chimere/forms.py @@ -289,6 +289,8 @@ class MarkerAdminFormBase(forms.ModelForm): self.fields['end_date'].widget = DatePickerWidget() if subcategories: self.fields['categories'].choices = subcategories + elif hasattr(self, 'categories_choices'): + self.fields['categories'].choices = self.categories_choices def clean(self): ''' |