2010-05-10 18 views
1

這是我的表格:Django的:_init_ DEF工作,但並沒有在Django的形式升級到類

class IPTrackerSearchForm(forms.Form): 
keyword = forms.CharField(max_length=100, widget=forms.TextInput(attrs={'size':'50'})) 
search_in = forms.ChoiceField(required=False, choices=ANY_CHOICE + MODULE_SEARCH_IN_CHOICES) 
product  = forms.CharField(max_length=64,widget=forms.TextInput(attrs={'size':'50'})) 
family  = forms.CharField(max_length=64,widget=forms.TextInput(attrs={'size':'50'})) 
temp_result = Merlin.objects.values('build').distinct() 
result = [(value['build'], value['build']) for value in temp_result] 
build  = forms.ChoiceField(choices=ANY_CHOICE + result) 

circuit_name  = forms.CharField(max_length=256,widget=forms.TextInput(attrs={'size':'50'})) 
parameterization = forms.CharField(max_length=1024,widget=forms.TextInput(attrs={'size':'50'})) 
metric  = forms.CharField(max_length=64,widget=forms.TextInput(attrs={'size':'50'})) 

show_in_one_page = forms.BooleanField(required=False, label="Show filtered result in one page", widget=forms.CheckboxInput(attrs={'class':'checkbox'})) 
def __init__(self, *args, **kwargs): 
    super(IPTrackerSearchForm, self).__init__(*args, **kwargs) 
    temp_result = Merlin.objects.values('build').distinct() 
    self.result = [(value['build'], value['build']) for value in temp_result] 
    self.build  = forms.ChoiceField(choices=ANY_CHOICE + self.result) 
    print self.result 

其目的是,每次我刷新網頁,當有新的記錄,以「建」列在數據庫中。它應該更新到下面的「構建」框中,但它永遠不會更新,除非重新啓動服務器。我使用print,看到__init__檢測到新記錄,但無法在Class中建立。 非常感謝

回答

0

您實際上需要更新self.fields['build']而不是self.build

def __init__(self, *args, **kwargs): 
    super(IPTrackerSearchForm, self).__init__(*args, **kwargs) 
    temp_result = Merlin.objects.values('build').distinct() 
    result = [(value['build'], value['build']) for value in temp_result] 
    self.fields['build'] = forms.ChoiceField(choices=ANY_CHOICE + result) 
    print result 

因爲你沒有更新self.fields,你看到在編譯時查詢時,不執行的結果。

+0

嗨,傑克M.它的工作原理。 :)太高興了,非常感謝。非常感謝。 你是男人 謝謝 – user372013 2010-05-10 18:14:04