diff options
author | Jon Dufresne <jon.dufresne@gmail.com> | 2019-11-17 15:41:23 -0800 |
---|---|---|
committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2019-12-23 10:34:50 +0100 |
commit | 67ea35df52f2e29bafca8881e4f356934061644e (patch) | |
tree | 42dfda9db4b6d8db3792ee6939c06019fc55477a /tests/model_forms | |
parent | 5da85ea73724d75e609c5ee4316e7e5be8f17810 (diff) | |
download | django-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.py | 26 |
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 |