django: _init_ def работает, но не обновляется до класса в форме django - PullRequest
1 голос
/ 10 мая 2010

это моя форма:

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

С той целью, чтобы каждый раз, когда я обновлял веб-страницу, появлялась новая запись, чтобы «построить» столбец в базе данных. Он должен обновиться до выпадающего списка "build" здесь, но он никогда не обновится, если не перезапустить сервер. Я использую печать и вижу, что __init__ обнаруживает новую запись, но не может перейти в класс. Большое спасибо

1 Ответ

0 голосов
/ 10 мая 2010

Вам действительно нужно обновить 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, вы видите результат запроса во время компиляции, а не выполнения.

...