From 67ea35df52f2e29bafca8881e4f356934061644e Mon Sep 17 00:00:00 2001 From: Jon Dufresne Date: Sun, 17 Nov 2019 15:41:23 -0800 Subject: Fixed #30998 -- Added ModelChoiceIteratorValue to pass the model instance to ChoiceWidget.create_option(). --- tests/model_forms/test_modelchoicefield.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'tests/model_forms') 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', []), ( + '' + ) % (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 -- cgit v1.3