diff options
author | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-12-07 02:54:15 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-12-07 02:54:15 +0100 |
commit | af8522d68d00ff30bc188513525020f0eda3ae2d (patch) | |
tree | 5f1deb67741f356f7e0e66e490bf73b09eacc44b /chimere/admin.py | |
parent | fff82d3ba66485fdfc58297507ae1438bc9996ab (diff) | |
download | Chimère-af8522d68d00ff30bc188513525020f0eda3ae2d.tar.bz2 Chimère-af8522d68d00ff30bc188513525020f0eda3ae2d.zip |
Admin: improve non overloading imports
* improve non overloading import management in OSM
* add a warning message to "modified" items form
Diffstat (limited to 'chimere/admin.py')
-rw-r--r-- | chimere/admin.py | 54 |
1 files changed, 42 insertions, 12 deletions
diff --git a/chimere/admin.py b/chimere/admin.py index 2d5f8bf..0f17d30 100644 --- a/chimere/admin.py +++ b/chimere/admin.py @@ -95,39 +95,44 @@ def export_to_csv(modeladmin, request, queryset): export_to_csv.short_description = _(u"Export to CSV") def managed_modified(modeladmin, request, queryset): + # not very clean... There is must be a better way to do that + redirect_url = request.get_full_path().split('admin_modification')[0] if queryset.count() != 1: messages.error(request, _(u"Only one item can be managed at a " u"time.")) - return HttpResponseRedirect(request.get_full_path()) + return HttpResponseRedirect(redirect_url) item = queryset.all()[0] - if not item.status == 'M': + if not item.ref_item or item.ref_item == item: try: - item = modeladmin.model.objects.get(ref_item=item, status='M') + item = modeladmin.model.objects.get(ref_item=item) except ObjectDoesNotExist: messages.error(request, _(u"No modified item associated " u"to the selected item.")) - return HttpResponseRedirect(request.get_full_path()) + return HttpResponseRedirect(redirect_url) item_ref = item.ref_item if request.POST.get('rapprochement'): couple = [(item, item_ref)] if hasattr(item, 'associated_marker'): couple.append((item.associated_marker.all()[0], item_ref.associated_marker.all()[0])) - updated_keys = dict(request.POST) + updated = dict(request.POST) # clean for k in ('action', 'rapprochement', 'index', '_selected_action'): - if k in updated_keys: - updated_keys.pop(k) + if k in updated: + updated.pop(k) for idx, cpl in enumerate(couple): it, it_ref = cpl # don't copy geometry of associated items if idx: for k in ('route', 'point'): - if k in updated_keys: - updated_keys.pop(k) + if k in updated: + updated.pop(k) + updated_keys = updated.keys() + if it.status == 'I': + updated_keys.append('import_version') for k in updated_keys: - if not request.POST[k]: + if k != 'import_version' and not request.POST[k]: continue if hasattr(it_ref, k): c_value = getattr(it_ref, k) @@ -149,7 +154,7 @@ def managed_modified(modeladmin, request, queryset): it.delete() item.delete() messages.success(request, _(u"Modified item traited.")) - return HttpResponseRedirect(request.get_full_path()) + return HttpResponseRedirect(redirect_url) return render_to_response('admin/chimere/managed_modified.html', {'item':item, 'item_ref':item_ref}, context_instance=RequestContext(request)) @@ -229,7 +234,24 @@ class MarkerAdmin(admin.ModelAdmin): qs = qs.order_by(*ordering) return qs.distinct() -class RouteAdmin(admin.ModelAdmin): + def admin_modification(self, request, item_id): + ''' + Redirect to the marker modification form + ''' + return managed_modified(self, request, + Marker.objects.filter(pk=item_id)) + def get_urls(self): + from django.conf.urls.defaults import * + urls = super(MarkerAdmin, self).get_urls() + my_urls = patterns('', + url(r'^admin_modification/(?P<item_id>\d+)/$', + self.admin_site.admin_view(self.admin_modification), + name='admin-modification'), + ) + return my_urls + urls + + +class RouteAdmin(MarkerAdmin): """ Specialized the Route field. """ @@ -261,6 +283,7 @@ class RouteAdmin(admin.ModelAdmin): 'has_associated_marker') }), ) + inlines = [] def queryset(self, request): qs = self.model._default_manager.get_query_set() @@ -275,6 +298,13 @@ class RouteAdmin(admin.ModelAdmin): qs = qs.order_by(*ordering) return qs + def admin_modification(self, request, item_id): + ''' + Redirect to the route modification form + ''' + return managed_modified(self, request, + Route.objects.filter(pk=item_id)) + class LayerInline(admin.TabularInline): model = AreaLayers extra = 1 |