<legend>{% trans "Modify an entry" %}</legend>
<div class="field">
<label>{% trans "Value" %}: <input id="id_value_edit" type="text" name="value" value="{{enumeration_record.value}}" /></label>
-
</div>
<br />
<div class="buttons">
</div>
</fieldset>
</form>
- <br style="clear: right"/>
+
+ <form class="mod" id="replenum" method="post"
+ action="{% url telemeta-enumeration-replace enumeration_id,enumeration_record.id %}">{% csrf_token %}
+ <fieldset>
+ <legend>{% trans "Replace by" %}</legend>
+ <div class="field">
+ <select name="value">
+ {% for record in enumeration_records %}
+ <option value="{{ record.id }}" />{{ record.value }}</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('replenum').submit(); return false;">{% trans "Replace" %}</a>
+ <a href="{% url telemeta-enumeration-edit enumeration_id %}"
+ class="component_icon button icon_cancel">{% trans "Cancel" %}</a>
+ </div>
+ </fieldset>
+ </form>
+
+<br style="clear: right"/>
{% endblock %}
+ r'(?P<value_id>[0-9]+)/update/$',
admin_view.update_enumeration_value,
name="telemeta-enumeration-record-update"),
+ url(r'^admin/enumerations/(?P<enumeration_id>[0-9a-z]+)/'
+ + r'(?P<value_id>[0-9]+)/replace/$',
+ admin_view.replace_enumeration_value,
+ name="telemeta-enumeration-replace"),
# Geographic browsing
url(r'^geo/$', geo_view.list_continents, name="telemeta-geo-continents"),
vars["enumeration_id"] = enumeration._meta.module_name
vars["enumeration_name"] = enumeration._meta.verbose_name
vars["enumeration_record"] = enumeration.objects.get(id__exact=value_id)
+ vars["enumeration_records"] = enumeration.objects.all()
+
return render(request, 'telemeta/enumeration_edit_value.html', vars)
@method_decorator(permission_required('telemeta.change_keyword'))
@method_decorator(permission_required('telemeta.change_keyword'))
def replace_enumeration_value(self, request, enumeration_id, value_id):
-
if request.method == 'POST':
- enumeration = self.__get_enumeration(enumeration_id)
- if enumeration == None:
- raise Http404
+ enumeration = self.__get_enumeration(enumeration_id)
+ to_value_id = request.POST["value"]
+ delete = False
+ if 'delete' in request.POST.keys():
+ delete = True
- record = enumeration.objects.get(id__exact=value_id)
- record.value = request.POST["value"]
- record.save()
+ if enumeration == None:
+ raise Http404
+
+ 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()]
+
+ 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) == WeakForeignKey:
+ if field.rel.to == enumeration:
+ setattr(obj, name, to_record)
+ obj.save()
+ except:
+ continue
+ if delete:
+ from_record.delete()
return self.edit_enumeration(request, enumeration_id)