2012-01-13 52 views
0

我想加載窗體過載中的MultipleChoiceField的默認值。Django MultipleChoiceField不更新窗體過載中的初始數據

所以,如果我給MultipleChoiceField內初始變量它的工作原理:

class UserPreferences(forms.Form): 
    my_form = forms.MultipleChoiceField(
     widget = forms.CheckboxSelectMultiple(), 
     choices = MY_CHOICES, 
     initial = MY_INITIAL_DICT) 

但是,如果我嘗試從與用戶數據庫中獲取初始值和更新初始如下,my_form初始變量沒有按」 T改變和保持爲空:

class UserPreferences(forms.Form): 
    my_form = forms.MultipleChoiceField(
     widget = forms.CheckboxSelectMultiple(), 
     choices = MY_CHOICES) 

    def __init__(self, user): 
     initial = make_my_dict_from(MyModel.objects.filter(user=user)) 

     super(UserPreferences, self).__init__(initial, empty_permitted) 

如果我這樣做了簡單的ChoiceField它的工作原理,但與MultipleChoiceField。

感謝您的任何建議!

回答

0

試試這個:

super(UserPreferences, self).__init__(initial=initial) 

您需要使用關鍵字參數是這樣的。 Python不會查看您的變量名稱,並使用正確的插槽。

「empty_permitted」來自哪裏?你的例子確實使用了,但沒有定義這個變量。

+0

對不起,我沒有很好地再現我在__init__中的真實例子,我有更多的參數。當然,初始=初始等等對於其餘的參數是更好更清潔的做法,但那不是我的問題。 Django具有與MultipleChoiceFields相似的特殊行爲。無論如何,謝謝你的回答! – ScotchAndSoda 2012-01-13 17:17:08

+0

我已經使用了MultipleChoiceFields,並且AFAIK沒有特殊的行爲。 – guettli 2012-01-13 21:51:18