diff options
-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): ''' |