2015-03-25 2 views
0

Я пытаюсь изменить виджет полей в форме, которые имеют строку в имени, я пытаюсь сделать что-то вроде следующего:Джанго - заменить форму виджет для полей в списке

class CI_tableForm(ModelForm): 
     class Meta: 
      model = CI_table 
      fields = report_query_values 
      for field in report_query_values: 
       if "_id" in field: 
        field = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple) 

Не уверен, возможно ли это или нет. На данный момент это не ошибка, но и не изменяет виджетов.

Спасибо, Исаака

ответ

1

Вы должны сделать это в __init__ конструкторе:

class CI_tableForm(ModelForm): 

    class Meta: 
     model = CI_table 
     fields = report_query_values 

    def __init__(self, *args, **kwargs): 
     super(CI_tableForm, self).__init__(*args, **kwargs) 
     for field in report_query_values: 
      if "_id" in field: 
       choices = self.fields[field].widget.choices 
       self.fields[field].widget = forms.CheckboxSelectMultiple(
                  choices=choices) 
+0

Я пытался что-то подобное и использовал __init__.py файл в основной папке приложения, но не сделали work.Should мне изменить другой файл инициализации? – isaapm

+0

Я пробовал еще раз, и я думаю, проблема в том, как я получаю report_query_values, который я получаю от url: report_query_values ​​= QueryDict (request.META ['QUERY_STRING']). Keys() – isaapm

+0

Я говорю о [' __init__() '] (https://docs.python.org/2/tutorial/classes.html#class-objects), а не файл' __init __. py'. – catavaran

Смежные вопросы