Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何自定义表单属性。在Django中选择选项_Python_Django_Select_Widget - Fatal编程技术网

Python 如何自定义表单属性。在Django中选择选项

Python 如何自定义表单属性。在Django中选择选项,python,django,select,widget,Python,Django,Select,Widget,我正在处理一个定制需求,该需求要求定制选择选项属性。我的下拉列表将显示选项列表,其中一些选项应根据特定条件显示为禁用 我已尝试通过传递disabled=disabled来自定义Select小部件属性。但这会禁用整个下拉列表。通过查看django 1.11.5的代码,似乎Select上应用的属性将应用于其选项 有人能建议如何实现这一功能吗 谢谢你我认为你可以对django.forms.widgets进行子分类。选择widget,将新参数禁用的\u选项传递给它的\u初始化\u函数,并覆盖创建\u选

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

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

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


谢谢你

我认为你可以对django.forms.widgets进行子分类。选择
widget,将新参数
禁用的\u选项
传递给它的
\u初始化\u
函数,并覆盖
创建\u选项
方法,如下所示:

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

希望这能有所帮助。

非常感谢。这真是一个很大的帮助。在做了一些小改动之后,我可以让它工作:-)我在这里使用一个模型表单定义了一个完整的例子:有一个通用的解决方案适用于Django 2.+并允许在选项中添加标题和其他内容,请参阅