如何自定义表单的属性。在Django

时间:2017-09-14 07:37:46

标签: python django select widget

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

List of options along with disabled options

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

有人可以建议如何实现这一功能吗?

谢谢

1 个答案:

答案 0 :(得分:1)

我认为您可以对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

希望这有帮助。