Django如何将选择列表传递给自定义选择小部件

时间:2019-01-08 14:52:40

标签: python django django-forms django-widget

我需要覆盖选择小部件。

class TooltipSelectWidget(Select) :

    def __init__(self, *args, **kwargs) :
        super().__init__(*args, **kwargs)

然后我以一种形式来称呼它。但是我在文档中看不到如何将选择列表传递给该自定义小部件。

3 个答案:

答案 0 :(得分:0)

如果choix包含可供选择的元组列表,那么下面的代码就可以完成工作:

form.fields[name] = ChoiceField (widget = TooltipSelectWidget (attrs = attrs, choices = choix) choices = choix)

诀窍在于,需要重复选择列表,一次是对小部件,一次是对choicefield)

答案 1 :(得分:0)

将此添加到表单init:

update table_name
set userid=5
where name = 'xyz';
update table_name
set userid=6
where name = 'abc';

答案 2 :(得分:0)

在您的代码中,调用超类初始化程序后,将选择设置如下:

class TooltipSelectWidget(Select) :

    def __init__(self, *args, **kwargs) :
        super().__init__(*args, **kwargs)
        self.choices = []  # List of 2-tuple values

如果您查看__init__类(自定义窗口小部件的基类)的Select的代码,则可以直观地了解为什么这是解决方案:

class Select(Widget):
    allow_multiple_selected = False

    def __init__(self, attrs=None, choices=()):
        super(Select, self).__init__(attrs)
        # choices can be any iterable, but we may need to render this widget
        # multiple times. Thus, collapse it into a list so it can be consumed
        # more than once.
        self.choices = list(choices)

一种更好的方法是默认情况下在

中包含您的自定义选项
class TooltipSelectWidget(Select) :

   CUSTOM_CHOICES = ()  # Modify at will. 

    def __init__(self, attrs=None, choices=CUSTOM_CHOICES) :
        super().__init__(attrs=attrs, choices=choices)