summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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
commit6f9cdeb9ad2498a2916c8a263056e3424b86b949 (patch)
tree11f7e01203e2a510b8f75f12601c5b174ef629ad
parentc255b30707aae7811dc5391c1615b9021a077352 (diff)
downloadChimè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.py35
-rw-r--r--chimere/forms.py2
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):
'''