如何在 Django 中自定义 forms.Select 选项的属性

How to customise attributes of forms.Select options in Django

我正在处理一个需要自定义 select 选项属性的自定义需求。我的下拉列表将显示选项列表,其中一些选项应根据特定条件显示为禁用。

我尝试通过传递 disabled = disabled 来自定义 Select widget attributes。但这会禁用整个下拉菜单。通过查看 django 1.11.5 的代码,似乎 Select 上应用的属性将应用于其选项。

任何人都可以建议如何实现此功能吗?

谢谢

我认为您可以子class django.forms.widgets.Select 小部件,将新参数 disabled_choices 传递给它的 __init__ 函数并覆盖 create_option 方法,例如这个:

class MySelect(Select):

    def __init__(self, attrs=None, choices=(), disabled_choices=()):
        super(Select, self).__init__(attrs, choices=choices)
        # disabled_choices is a list of disabled values
        self.disabled_choices = disabled_choices

    def create_option(self, name, value, label, selected, index, subindex=None, attrs=None):
        option = super(Select, self).create_option(name, value, label, selected, index, subindex, attrs)
        if value in self.disabled_choices:
           option['attrs']['disabled'] = True
        return option

希望对您有所帮助。