From 2a3a0eb09231f7cade8fd945bf4af1b251df12e3 Mon Sep 17 00:00:00 2001 From: Raphael Merx Date: Wed, 8 Mar 2017 03:56:29 +0900 Subject: [PATCH] Fixed #27905 -- Added RelatedFieldWidgetWrapper.value_omitted_from_data(). --- django/contrib/admin/widgets.py | 3 +++ docs/releases/1.10.7.txt | 3 ++- tests/admin_widgets/tests.py | 9 +++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/django/contrib/admin/widgets.py b/django/contrib/admin/widgets.py index 9d3c22540e0..588bfb58e3e 100644 --- a/django/contrib/admin/widgets.py +++ b/django/contrib/admin/widgets.py @@ -303,6 +303,9 @@ class RelatedFieldWidgetWrapper(forms.Widget): def value_from_datadict(self, data, files, name): return self.widget.value_from_datadict(data, files, name) + def value_omitted_from_data(self, data, files, name): + return self.widget.value_omitted_from_data(data, files, name) + def id_for_label(self, id_): return self.widget.id_for_label(id_) diff --git a/docs/releases/1.10.7.txt b/docs/releases/1.10.7.txt index dd5cf35fba0..de9a511f075 100644 --- a/docs/releases/1.10.7.txt +++ b/docs/releases/1.10.7.txt @@ -9,4 +9,5 @@ Django 1.10.7 fixes several bugs in 1.10.6. Bugfixes ======== -* ... +* Made admin's ``RelatedFieldWidgetWrapper`` use the wrapped widget's + ``value_omitted_from_data()`` method (:ticket:`27905`). diff --git a/tests/admin_widgets/tests.py b/tests/admin_widgets/tests.py index de59c26b220..b7814f966ca 100644 --- a/tests/admin_widgets/tests.py +++ b/tests/admin_widgets/tests.py @@ -646,6 +646,15 @@ class RelatedFieldWidgetWrapperTests(SimpleTestCase): output = wrapper.render('name', 'value') self.assertIn('custom render output', output) + def test_widget_delegates_value_omitted_from_data(self): + class CustomWidget(forms.Select): + def value_omitted_from_data(self, data, files, name): + return False + rel = Album._meta.get_field('band').remote_field + widget = CustomWidget() + wrapper = widgets.RelatedFieldWidgetWrapper(widget, rel, widget_admin_site) + self.assertIs(wrapper.value_omitted_from_data({}, {}, 'band'), False) + @override_settings(ROOT_URLCONF='admin_widgets.urls') class AdminWidgetSeleniumTestCase(AdminSeleniumTestCase):