</div>
</fieldset>
</form>
+
+<form class="mod" id="replinstru" method="post"
+ action="{% url telemeta-instrument-record-replace instrument.id %}">{% csrf_token %}
+ <fieldset>
+ <legend>{% trans "Replace by" %}</legend>
+ <div class="field">
+ <select name="value">
+ {% for record in instruments %}
+ <option value="{{ record.id }}" />{{ record.name }}</option>
+ {% endfor %}
+ </select>
+ <input type="checkbox" name="delete" value="delete"> {% trans "delete value after replacing" %}
+ </div>
+ <br />
+ <div class="buttons">
+ <a href="#" class="component_icon button icon_save"
+ onclick="document.getElementById('replinstru').submit(); return false;">{% trans "Replace" %}</a>
+ <a href="{% url telemeta-instrument-edit %}"
+ class="component_icon button icon_cancel">{% trans "Cancel" %}</a>
+ </div>
+ </fieldset>
+ </form>
+
+
+
<br style="clear: right"/>
{% endblock %}
+ r'(?P<value_id>[0-9]+)/update/$',
instrument_view.update_instrument_value,
name="telemeta-instrument-record-update"),
+ url(r'^admin/instruments/'
+ + r'(?P<value_id>[0-9]+)/replace/$',
+ instrument_view.replace_instrument_value,
+ name="telemeta-instrument-record-replace"),
# enumerations administration
url(r'^admin/enumerations/(?P<enumeration_id>[0-9a-z]+)/$',
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()
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()
@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):
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)
+