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