Index: django/db/models/fields/related.py
===================================================================
--- django/db/models/fields/related.py (revision 3657)
+++ django/db/models/fields/related.py (working copy)
@@ -566,6 +566,11 @@
self.db_index = True
+ def get_related_pk(self):
+ """ Returning the primary key of the object we are related to
+ """
+ return self.get_choices()[1][0]
+
def get_attname(self):
return '%s_id' % self.name
Index: django/contrib/admin/media/js/admin/RelatedObjectLookups.js
===================================================================
--- django/contrib/admin/media/js/admin/RelatedObjectLookups.js (revision 3657)
+++ django/contrib/admin/media/js/admin/RelatedObjectLookups.js (working copy)
@@ -55,3 +55,30 @@
}
win.close();
}
+
+function showEditPopup(triggeringLink) {
+ var name = triggeringLink.id.replace(/^edit_/,'');
+ var elem = document.getElementById(name);
+ if (elem) {
+ if (elem.nodeName == 'SELECT') {
+ var id = elem.options[elem.selectedIndex].value
+ name = name.replace(/\./g,'___');
+ var win = window.open(triggeringLink.href + id + '/?_popup=1',name, 'height=500,width=800,resizable=yes,scrollbars=yes');
+ return false;
+ }
+ }
+ return false;
+}
+
+function dismissEditPopup(win, newId, newRepr) {
+ var name = win.name.replace(/___/g, '.');
+ var elem = document.getElementById(name);
+ if(elem) {
+ if( elem.nodeName == 'SELECT') {
+ var o = new Option(newRepr, newId);
+ elem.options[elem.selectedIndex] = o;
+ o.selected = true;
+ }
+ }
+ win.close();
+}
Index: django/contrib/admin/views/main.py
===================================================================
--- django/contrib/admin/views/main.py (revision 3657)
+++ django/contrib/admin/views/main.py (working copy)
@@ -130,6 +130,10 @@
if field.rel:
self.related_url = '../../../%s/%s/' % (field.rel.to._meta.app_label, field.rel.to._meta.object_name.lower())
+ try:
+ self.rel_to_pk = field.get_related_pk() # for one-to-one fields
+ except:
+ pass
def original_value(self):
if self.original:
@@ -343,6 +347,10 @@
LogEntry.objects.log_action(request.user.id, ContentType.objects.get_for_model(model).id, pk_value, str(new_object), CHANGE, change_message)
msg = _('The %(name)s "%(obj)s" was changed successfully.') % {'name': opts.verbose_name, 'obj': new_object}
+ if request.REQUEST.has_key("_popup"):
+ http_response = '' % \
+ (pk_value, str(new_object).replace('"', '\\"'))
+ return HttpResponse(http_response)
if request.POST.has_key("_continue"):
request.user.message_set.create(message=msg + ' ' + _("You may edit it again below."))
if request.REQUEST.has_key('_popup'):
Index: django/contrib/admin/templates/widget/one_to_one.html
===================================================================
--- django/contrib/admin/templates/widget/one_to_one.html (revision 3657)
+++ django/contrib/admin/templates/widget/one_to_one.html (working copy)
@@ -1,2 +1,4 @@
+{% load admin_modify adminmedia %}
{% if add %}{% include "widget/foreign.html" %}{% endif %}
-{% if change %}{% if bound_field.existing_display %} {{ bound_field.existing_display|truncatewords:"14"|escape }}{% endif %}{% endif %}
+{% if change %}
+{% if bound_field.rel_to_pk %} {{ bound_field.existing_display|truncatewords:"14"|escape }}{% endif %}{% endif %}
Index: django/contrib/admin/templates/widget/foreign.html
===================================================================
--- django/contrib/admin/templates/widget/foreign.html (revision 3657)
+++ django/contrib/admin/templates/widget/foreign.html (working copy)
@@ -8,8 +8,11 @@
{% endif %}
{% else %}
{% if bound_field.needs_add_label %}
-
-{% endif %}{% endif %}
+
+
+
+{% endif %}
+{% endif %}
{% if change %}
{% if bound_field.field.primary_key %}
{{ bound_field.original_value }}