diff --git a/django/contrib/admin/templates/admin/field_line.html b/django/contrib/admin/templates/admin/field_line.html
index cbcac1588c..0513d33da2 100644
--- a/django/contrib/admin/templates/admin/field_line.html
+++ b/django/contrib/admin/templates/admin/field_line.html
@@ -13,7 +13,7 @@
{{ bound_field.original_value }}
{% endif %}
{% if bound_field.raw_id_admin %}
- {% if bound_field.existing_repr %} {{ bound_field.existing_repr|truncatewords:"14" }}{% endif %}
+ {% if bound_field.existing_display %} {{ bound_field.existing_display|truncatewords:"14" }}{% endif %}
{% endif %}
{% endif %}
{% if bound_field.field.help_text %}
{{bound_field.field.help_text}}
{% endif %}
diff --git a/django/contrib/admin/templatetags/admin_modify.py b/django/contrib/admin/templatetags/admin_modify.py
index df9f4e70eb..88b21d3e12 100644
--- a/django/contrib/admin/templatetags/admin_modify.py
+++ b/django/contrib/admin/templatetags/admin_modify.py
@@ -215,7 +215,7 @@ def filter_interface_script_maybe(bound_field):
f = bound_field.field
if f.rel and isinstance(f.rel, meta.ManyToMany) and f.rel.filter_interface:
return '\n' % (
+ ' SelectFilter.init("id_%s", "%s", %s, "%s"); });\n' % (
f.name, f.verbose_name, f.rel.filter_interface-1, ADMIN_MEDIA_PREFIX)
else:
return ''
diff --git a/django/contrib/admin/views/main.py b/django/contrib/admin/views/main.py
index 0b2f87dff5..009c57eaad 100644
--- a/django/contrib/admin/views/main.py
+++ b/django/contrib/admin/views/main.py
@@ -78,7 +78,7 @@ class FilterSpec(object):
t.append('By %s:
\n\n' % self.title)
for choice in self.choices:
- t.append('- %r
\n' % \
+ t.append('- %s
\n' % \
(self.is_selected(choice) and ' class="selected"' or ''),
self.get_query_string(choice) ,
self.get_display(choice) )
@@ -109,7 +109,7 @@ class RelatedFilterSpec(FilterSpec):
cl.get_query_string({}, [self.lookup_kwarg])))
for val in self.lookup_choices:
pk_val = getattr(val, self.field.rel.to.pk.column)
- t.append('- %r
\n' % \
+ t.append('- %s
\n' % \
((self.lookup_val == str(pk_val) and ' class="selected"' or ''),
cl.get_query_string( {self.lookup_kwarg: pk_val}), val))
t.append('
\n\n')
@@ -444,26 +444,26 @@ class AdminBoundField(BoundField):
self.cell_class_attribute = ' class="%s" ' % ' '.join(classes)
self._repr_filled = False
- def _fetch_existing_repr(self, func_name):
+ def _fetch_existing_display(self, func_name):
class_dict = self.original.__class__.__dict__
func = class_dict.get(func_name)
return func(self.original)
- def _fill_existing_repr(self):
- if self._repr_filled:
+ def _fill_existing_display(self):
+ if self._display_filled:
return
#HACK
if isinstance(self.field.rel, meta.ManyToOne):
func_name = 'get_%s' % self.field.name
- self._repr = self._fetch_existing_repr(func_name)
+ self._display = self._fetch_existing_display(func_name)
elif isinstance(self.field.rel, meta.ManyToMany):
func_name = 'get_%s_list' % self.field.name
- self._repr = ",".join(self._fetch_existing_repr(func_name))
- self._repr_filled = True
-
- def existing_repr(self):
- self._fill_existing_repr()
- return self._repr
+ self._display = ",".join(self._fetch_existing_display(func_name))
+ self._display_filled = True
+
+ def existing_display(self):
+ self._fill_existing_display()
+ return self._display
def __repr__(self):
return repr(self.__dict__)
@@ -542,7 +542,7 @@ def render_change_form(opts, manipulator, app_label, context, add=False, change=
def log_add_message(user, opts,manipulator,new_object):
pk_value = getattr(new_object, opts.pk.column)
- log.log_action(user.id, opts.get_content_type_id(), pk_value, repr(new_object), log.ADDITION)
+ log.log_action(user.id, opts.get_content_type_id(), pk_value, str(new_object), log.ADDITION)
def add_stage(request, app_label, module_name, show_delete=False, form_url='', post_url='../', post_url_continue='../%s/', object_id_override=None):
mod, opts = _get_mod_opts(app_label, module_name)
@@ -612,7 +612,7 @@ def log_change_message(user, opts,manipulator,new_object):
change_message = ' '.join(change_message)
if not change_message:
change_message = 'No fields changed.'
- log.log_action(user.id, opts.get_content_type_id(), pk_value, repr(new_object), log.CHANGE, change_message)
+ log.log_action(user.id, opts.get_content_type_id(), pk_value, str(new_object), log.CHANGE, change_message)
def change_stage(request, app_label, module_name, object_id):
mod, opts = _get_mod_opts(app_label, module_name)
@@ -726,10 +726,10 @@ def _get_deleted_objects(deleted_objects, perms_needed, user, obj, opts, current
if related.field.rel.edit_inline or not related.opts.admin:
# Don't display link to edit, because it either has no
# admin or is edited inline.
- nh(deleted_objects, current_depth, ['%s: %r' % (capfirst(related.opts.verbose_name), sub_obj), []])
+ nh(deleted_objects, current_depth, ['%s: %s' % (capfirst(related.opts.verbose_name), sub_obj), []])
else:
# Display a link to the admin page.
- nh(deleted_objects, current_depth, ['%s: %r' % \
+ nh(deleted_objects, current_depth, ['%s: %s' % \
(capfirst(related.opts.verbose_name), related.opts.app_label, related.opts.module_name,
getattr(sub_obj, related.opts.pk.column), sub_obj), []])
_get_deleted_objects(deleted_objects, perms_needed, user, sub_obj, related.opts, current_depth+2)
@@ -740,11 +740,11 @@ def _get_deleted_objects(deleted_objects, perms_needed, user, obj, opts, current
if related.field.rel.edit_inline or not related.opts.admin:
# Don't display link to edit, because it either has no
# admin or is edited inline.
- nh(deleted_objects, current_depth, ['%s: %s' % (capfirst(related.opts.verbose_name), strip_tags(repr(sub_obj))), []])
+ nh(deleted_objects, current_depth, ['%s: %s' % (capfirst(related.opts.verbose_name), strip_tags(str(sub_obj))), []])
else:
# Display a link to the admin page.
nh(deleted_objects, current_depth, ['%s: %s' % \
- (capfirst(related.opts.verbose_name), related.opts.app_label, related.opts.module_name, sub_obj.id, strip_tags(repr(sub_obj))), []])
+ (capfirst(related.opts.verbose_name), related.opts.app_label, related.opts.module_name, sub_obj.id, strip_tags(str(sub_obj))), []])
_get_deleted_objects(deleted_objects, perms_needed, user, sub_obj, related.opts, current_depth+2)
# If there were related objects, and the user doesn't have
# permission to delete them, add the missing perm to perms_needed.
@@ -764,11 +764,11 @@ def _get_deleted_objects(deleted_objects, perms_needed, user, obj, opts, current
# Don't display link to edit, because it either has no
# admin or is edited inline.
nh(deleted_objects, current_depth, ['One or more %s in %s: %s' % \
- (related.field.name, related.opts.verbose_name, strip_tags(repr(sub_obj))), []])
+ (related.field.name, related.opts.verbose_name, strip_tags(str(sub_obj))), []])
else:
# Display a link to the admin page.
nh(deleted_objects, current_depth, ['One or more %s in %s: %s' % \
- (related.field.name, related.opts.verbose_name, related.opts.app_label, related.opts.module_name, sub_obj.id, strip_tags(repr(sub_obj))), []])
+ (related.field.name, related.opts.verbose_name, related.opts.app_label, related.opts.module_name, sub_obj.id, strip_tags(str(sub_obj))), []])
# If there were related objects, and the user doesn't have
# permission to change them, add the missing perm to perms_needed.
if related.opts.admin and has_related_objs:
@@ -785,17 +785,17 @@ def delete_stage(request, app_label, module_name, object_id):
# Populate deleted_objects, a data structure of all related objects that
# will also be deleted.
- deleted_objects = ['%s: %s' % (capfirst(opts.verbose_name), object_id, strip_tags(repr(obj))), []]
+ deleted_objects = ['%s: %s' % (capfirst(opts.verbose_name), object_id, strip_tags(str(obj))), []]
perms_needed = sets.Set()
_get_deleted_objects(deleted_objects, perms_needed, request.user, obj, opts, 1)
if request.POST: # The user has already confirmed the deletion.
if perms_needed:
raise PermissionDenied
- obj_repr = repr(obj)
+ obj_display = str(obj)
obj.delete()
- log.log_action(request.user.id, opts.get_content_type_id(), object_id, obj_repr, log.DELETION)
- request.user.add_message('The %s "%s" was deleted successfully.' % (opts.verbose_name, obj_repr))
+ log.log_action(request.user.id, opts.get_content_type_id(), object_id, obj_display, log.DELETION)
+ request.user.add_message('The %s "%s" was deleted successfully.' % (opts.verbose_name, obj_display))
return HttpResponseRedirect("../../")
return render_to_response('admin/delete_confirmation', {
"title": "Are you sure?",
@@ -813,7 +813,7 @@ def history(request, app_label, module_name, object_id):
# If no history was found, see whether this object even exists.
obj = get_object_or_404(mod, pk=object_id)
return render_to_response('admin/object_history', {
- 'title': 'Change history: %r' % obj,
+ 'title': 'Change history: %s' % obj,
'action_list': action_list,
'module_name': capfirst(opts.verbose_name_plural),
'object': obj,
diff --git a/django/core/meta/fields.py b/django/core/meta/fields.py
index cc95d22cd2..bf94498651 100644
--- a/django/core/meta/fields.py
+++ b/django/core/meta/fields.py
@@ -284,7 +284,7 @@ class Field(object):
if self.choices:
return first_choice + list(self.choices)
rel_obj = self.rel.to
- return first_choice + [(getattr(x, rel_obj.pk.column), repr(x)) for x in rel_obj.get_model_module().get_list(**self.rel.limit_choices_to)]
+ return first_choice + [(getattr(x, rel_obj.pk.column), str(x)) for x in rel_obj.get_model_module().get_list(**self.rel.limit_choices_to)]
def get_choices_default(self):
if(self.radio_admin):
diff --git a/django/core/template/defaulttags.py b/django/core/template/defaulttags.py
index ce49bcc505..bce495d22d 100644
--- a/django/core/template/defaulttags.py
+++ b/django/core/template/defaulttags.py
@@ -192,6 +192,7 @@ class RegroupNode(Node):
for obj in obj_list:
grouper = resolve_variable_with_filters('var.%s' % self.expression, \
Context({'var': obj}))
+ #TODO: Is this a sensible way to determine equality?
if output and repr(output[-1]['grouper']) == repr(grouper):
output[-1]['list'].append(obj)
else: