From c4b8c46345305ad975e12f6a9a086874e639575c Mon Sep 17 00:00:00 2001 From: Raphael Merx Date: Tue, 7 Mar 2017 12:22:45 +0900 Subject: [PATCH] [1.10.x] Fixed #27905 -- Added RelatedFieldWidgetWrapper.value_omitted_from_data(). Backport of fd75c8f2b7070774f6e90f408cb5cddf65b8734e from master --- 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 e3553de70a..c228a3c594 100644 --- a/django/contrib/admin/widgets.py +++ b/django/contrib/admin/widgets.py @@ -337,6 +337,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 dd5cf35fba..de9a511f07 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 378a9290b7..308ec175d4 100644 --- a/tests/admin_widgets/tests.py +++ b/tests/admin_widgets/tests.py @@ -631,6 +631,15 @@ class RelatedFieldWidgetWrapperTests(SimpleTestCase): self.assertTrue(wrapper.can_change_related) self.assertFalse(wrapper.can_delete_related) + 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 = models.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):