summaryrefslogtreecommitdiff
path: root/tests/model_forms
diff options
context:
space:
mode:
authorJon Dufresne <jon.dufresne@gmail.com>2019-11-17 15:41:23 -0800
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2019-12-23 10:34:50 +0100
commit67ea35df52f2e29bafca8881e4f356934061644e (patch)
tree42dfda9db4b6d8db3792ee6939c06019fc55477a /tests/model_forms
parent5da85ea73724d75e609c5ee4316e7e5be8f17810 (diff)
downloaddjango-67ea35df52f2e29bafca8881e4f356934061644e.tar.gz
Fixed #30998 -- Added ModelChoiceIteratorValue to pass the model instance to ChoiceWidget.create_option().
Diffstat (limited to 'tests/model_forms')
-rw-r--r--tests/model_forms/test_modelchoicefield.py26
1 files changed, 26 insertions, 0 deletions
diff --git a/tests/model_forms/test_modelchoicefield.py b/tests/model_forms/test_modelchoicefield.py
index cecc727267..4a2ef30b90 100644
--- a/tests/model_forms/test_modelchoicefield.py
+++ b/tests/model_forms/test_modelchoicefield.py
@@ -260,6 +260,32 @@ class ModelChoiceFieldTests(TestCase):
self.assertIsInstance(field.choices, CustomModelChoiceIterator)
def test_choice_iterator_passes_model_to_widget(self):
+ class CustomCheckboxSelectMultiple(CheckboxSelectMultiple):
+ def create_option(self, name, value, label, selected, index, subindex=None, attrs=None):
+ option = super().create_option(name, value, label, selected, index, subindex, attrs)
+ # Modify the HTML based on the object being rendered.
+ c = value.instance
+ option['attrs']['data-slug'] = c.slug
+ return option
+
+ class CustomModelMultipleChoiceField(forms.ModelMultipleChoiceField):
+ widget = CustomCheckboxSelectMultiple
+
+ field = CustomModelMultipleChoiceField(Category.objects.all())
+ self.assertHTMLEqual(
+ field.widget.render('name', []), (
+ '<ul>'
+ '<li><label><input type="checkbox" name="name" value="%d" '
+ 'data-slug="entertainment">Entertainment</label></li>'
+ '<li><label><input type="checkbox" name="name" value="%d" '
+ 'data-slug="test">A test</label></li>'
+ '<li><label><input type="checkbox" name="name" value="%d" '
+ 'data-slug="third-test">Third</label></li>'
+ '</ul>'
+ ) % (self.c1.pk, self.c2.pk, self.c3.pk),
+ )
+
+ def test_custom_choice_iterator_passes_model_to_widget(self):
class CustomModelChoiceValue:
def __init__(self, value, obj):
self.value = value