From c05527dd609c26e4788df7eebb003c82033199e7 Mon Sep 17 00:00:00 2001 From: Joseph Kocherhans Date: Sun, 9 Sep 2007 19:15:01 +0000 Subject: [PATCH] newforms-admin: Fixed #4491. Thanks Honza Kral. git-svn-id: http://code.djangoproject.com/svn/django/branches/newforms-admin@6074 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/contrib/admin/options.py | 2 +- django/contrib/admin/widgets.py | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py index f1ac3521f0..03af8f50de 100644 --- a/django/contrib/admin/options.py +++ b/django/contrib/admin/options.py @@ -157,7 +157,7 @@ class BaseModelAdmin(object): # Wrap the widget's render() method with a method that adds # extra HTML to the end of the rendered output. formfield = db_field.formfield(**kwargs) - formfield.widget.render = widgets.RelatedFieldWidgetWrapper(formfield.widget.render, db_field.rel) + formfield.widget.render = widgets.RelatedFieldWidgetWrapper(formfield.widget.render, db_field.rel, self.admin_site) return formfield # For any other type of field, just call its formfield() method. diff --git a/django/contrib/admin/widgets.py b/django/contrib/admin/widgets.py index f5d0c458c9..dd0a95a8b1 100644 --- a/django/contrib/admin/widgets.py +++ b/django/contrib/admin/widgets.py @@ -91,15 +91,17 @@ class RelatedFieldWidgetWrapper(object): This class is a wrapper whose __call__() method mimics the interface of a Widget's render() method. """ - def __init__(self, render_func, rel): + def __init__(self, render_func, rel, admin_site): self.render_func, self.rel = render_func, rel + # so we can check if the related object is registered with this AdminSite + self.admin_site = admin_site def __call__(self, name, value, *args, **kwargs): from django.conf import settings rel_to = self.rel.to related_url = '../../../%s/%s/' % (rel_to._meta.app_label, rel_to._meta.object_name.lower()) output = [self.render_func(name, value, *args, **kwargs)] - if rel_to._meta.admin: # If the related object has an admin interface: + if rel_to in self.admin_site._registry: # If the related object has an admin interface: # TODO: "id_" is hard-coded here. This should instead use the correct # API to determine the ID dynamically. output.append(u' ' % \