From: Guillaume Pellerin Date: Thu, 19 Dec 2013 10:12:38 +0000 (+0100) Subject: add instrument replace view X-Git-Tag: 1.4.5~3^2~1 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=59942b76a96b82f2069de82df592738bcfe9e088;p=telemeta.git add instrument replace view --- diff --git a/telemeta/templates/telemeta/instrument_edit_value.html b/telemeta/templates/telemeta/instrument_edit_value.html index 28d2bd5b..9ca87255 100644 --- a/telemeta/templates/telemeta/instrument_edit_value.html +++ b/telemeta/templates/telemeta/instrument_edit_value.html @@ -20,5 +20,30 @@ + +
{% csrf_token %} +
+ {% trans "Replace by" %} +
+ + {% trans "delete value after replacing" %} +
+
+ +
+
+ + +
{% endblock %} diff --git a/telemeta/urls.py b/telemeta/urls.py index 45b5c5db..ab0af215 100644 --- a/telemeta/urls.py +++ b/telemeta/urls.py @@ -239,6 +239,10 @@ urlpatterns = patterns('', + r'(?P[0-9]+)/update/$', instrument_view.update_instrument_value, name="telemeta-instrument-record-update"), + url(r'^admin/instruments/' + + r'(?P[0-9]+)/replace/$', + instrument_view.replace_instrument_value, + name="telemeta-instrument-record-replace"), # enumerations administration url(r'^admin/enumerations/(?P[0-9a-z]+)/$', diff --git a/telemeta/views/admin.py b/telemeta/views/admin.py index 62fae36a..585fbccf 100644 --- a/telemeta/views/admin.py +++ b/telemeta/views/admin.py @@ -170,6 +170,7 @@ class AdminView(object): from_record = enumeration.objects.get(id__exact=value_id) to_record = enumeration.objects.get(id__exact=to_value_id) links = [rel.get_accessor_name() for rel in from_record._meta.get_all_related_objects()] + field_type = WeakForeignKey for link in links: objects = getattr(from_record, link).all() @@ -177,7 +178,7 @@ class AdminView(object): for name in obj._meta.get_all_field_names(): try: field = obj._meta.get_field(name) - if type(field) == WeakForeignKey: + if type(field) == field_type: if field.rel.to == enumeration: setattr(obj, name, to_record) obj.save() diff --git a/telemeta/views/instrument.py b/telemeta/views/instrument.py index 023aa8aa..ae88c225 100644 --- a/telemeta/views/instrument.py +++ b/telemeta/views/instrument.py @@ -69,8 +69,10 @@ class InstrumentView(object): @method_decorator(permission_required('telemeta.change_instrument')) def edit_instrument_value(self, request, value_id): instrument = Instrument.objects.get(id__exact=value_id) + instruments = Instrument.objects.all().order_by('name') - return render(request, 'telemeta/instrument_edit_value.html', {'instrument': instrument}) + return render(request, 'telemeta/instrument_edit_value.html', + {'instrument': instrument, 'instruments': instruments}) @method_decorator(permission_required('telemeta.change_instrument')) def update_instrument_value(self, request, value_id): @@ -81,3 +83,39 @@ class InstrumentView(object): instrument.save() return self.edit_instrument(request) + + + @method_decorator(permission_required('telemeta.change_instrument')) + def replace_instrument_value(self, request, value_id): + if request.method == 'POST': + to_value_id = request.POST["value"] + delete = False + if 'delete' in request.POST.keys(): + delete = True + + if from_record == None: + raise Http404 + + obj_type = Instrument + field_type = ForeignKey + from_record = Instrument.objects.get(id__exact=value_id) + to_record = Instrument.objects.get(id__exact=to_value_id) + links = [rel.get_accessor_name() for rel in from_record._meta.get_all_related_objects()] + + for link in links: + objects = getattr(from_record, link).all() + for obj in objects: + for name in obj._meta.get_all_field_names(): + try: + field = obj._meta.get_field(name) + if type(field) == field_type: + if field.rel.to == obj_type: + setattr(obj, name, to_record) + obj.save() + except: + continue + if delete: + from_record.delete() + + return self.edit_instrument(request) +