mirror of
https://github.com/django/django.git
synced 2025-08-04 10:59:45 +00:00
Improve RelatedFieldWidgetWrapper to use effective renderer and add test for custom renderer
This commit is contained in:
parent
7b8cdd1c6d
commit
65931e2cd8
2 changed files with 27 additions and 6 deletions
|
@ -316,8 +316,7 @@ class RelatedFieldWidgetWrapper(forms.Widget):
|
|||
from django.contrib.admin.views.main import IS_POPUP_VAR, TO_FIELD_VAR
|
||||
|
||||
attrs = attrs or {}
|
||||
if renderer is None:
|
||||
renderer = getattr(self.widget, "renderer", None)
|
||||
effective_renderer = renderer or getattr(self.widget, "renderer", None)
|
||||
rel_opts = self.rel.model._meta
|
||||
info = (rel_opts.app_label, rel_opts.model_name)
|
||||
related_field_name = self.rel.get_related_field().name
|
||||
|
@ -330,7 +329,7 @@ class RelatedFieldWidgetWrapper(forms.Widget):
|
|||
)
|
||||
context = {
|
||||
"rendered_widget": self.widget.render(
|
||||
name, value, attrs, renderer=renderer
|
||||
name, value, attrs, renderer=effective_renderer
|
||||
),
|
||||
"is_hidden": self.is_hidden,
|
||||
"name": name,
|
||||
|
|
|
@ -9,7 +9,7 @@ from unittest import skipUnless
|
|||
from django import forms
|
||||
from django.conf import settings
|
||||
from django.contrib import admin
|
||||
from django.contrib.admin import widgets
|
||||
from django.contrib.admin import AdminSite, ModelAdmin, widgets
|
||||
from django.contrib.admin.tests import AdminSeleniumTestCase
|
||||
from django.contrib.auth.models import User
|
||||
from django.core.files.storage import default_storage
|
||||
|
@ -22,7 +22,7 @@ from django.db.models import (
|
|||
ManyToManyField,
|
||||
UUIDField,
|
||||
)
|
||||
from django.forms.renderers import BaseRenderer
|
||||
from django.forms.renderers import BaseRenderer, DjangoTemplates
|
||||
from django.test import SimpleTestCase, TestCase, override_settings
|
||||
from django.test.selenium import screenshot_cases
|
||||
from django.test.utils import requires_tz_support
|
||||
|
@ -854,7 +854,7 @@ class ManyToManyRawIdWidgetTest(TestCase):
|
|||
|
||||
|
||||
@override_settings(ROOT_URLCONF="admin_widgets.urls")
|
||||
class RelatedFieldWidgetWrapperTests(SimpleTestCase):
|
||||
class RelatedFieldWidgetWrapperTests(TestCase):
|
||||
def test_no_can_add_related(self):
|
||||
rel = Individual._meta.get_field("parent").remote_field
|
||||
w = widgets.AdminRadioSelect()
|
||||
|
@ -1039,6 +1039,28 @@ class RelatedFieldWidgetWrapperTests(SimpleTestCase):
|
|||
self.assertIn("rendered_widget", context)
|
||||
self.assertIsNotNone(context["rendered_widget"])
|
||||
|
||||
def test_custom_renderer(self):
|
||||
class MockRequest:
|
||||
pass
|
||||
|
||||
class CustomRenderer(DjangoTemplates):
|
||||
def render(self, template_name, context, request=None):
|
||||
template = self.get_template(template_name)
|
||||
if template_name == "django/forms/widgets/select.html":
|
||||
return (
|
||||
template.render(context, request=request).strip()
|
||||
+ "<div>Extra</div>"
|
||||
)
|
||||
return template.render(context, request=request).strip()
|
||||
|
||||
site = AdminSite()
|
||||
ma = ModelAdmin(User, site)
|
||||
|
||||
request = MockRequest()
|
||||
UserForm = ma.get_form(request)
|
||||
form = UserForm({}, renderer=CustomRenderer())
|
||||
self.assertInHTML("<div>Extra</div>", form.render())
|
||||
|
||||
|
||||
@override_settings(ROOT_URLCONF="admin_widgets.urls")
|
||||
class AdminWidgetSeleniumTestCase(AdminSeleniumTestCase):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue