Django, как передать список выбора в виджет выбора - PullRequest
0 голосов
/ 08 января 2019

Мне нужно переопределить выбранный виджет.

class TooltipSelectWidget(Select) :

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

Тогда я называю это в форме. Но я не вижу в документации, как передать список выбора этому привычному виджету.

Ответы [ 3 ]

0 голосов
/ 15 января 2019

Добавьте это к форме init:

def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    CHOICES = [()]
    self.fields['choice_field'].choices = CHOICES
0 голосов
/ 15 января 2019

в вашем коде после вызова инициализатора суперкласса установите следующие значения:

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)
0 голосов
/ 14 января 2019

Если choix содержит список кортежей для выбора, то код ниже выполняет свою работу:

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

Хитрость в том, что список вариантов нужно повторить, один раз для виджета и один раз для поля выбора)

...