2010-05-10 3 views
1

ceci est ma forme:django: _init_ travail def mais ne met pas à jour à la classe sous forme de 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 

Dans le but que, chaque fois que je rafraîchir la page Web, où ont nouveau record à la colonne « construire » dans la base de données. Il devrait être mis à jour dans la liste déroulante "build" ici, mais il ne sera jamais mis à jour à moins de redémarrer le serveur. J'utilise print et je vois que __init__ détecte un nouvel enregistrement mais ne peut pas refecter à la classe. Un grand merci

Répondre

0

Vous avez réellement besoin de mettre à jour self.fields['build'] au lieu de 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 

Parce que vous n'êtes pas mise à jour self.fields, vous voyez le résultat de la requête au moment de la compilation, pas l'exécution.

+0

Bonjour Jack M. Ça marche. :) si heureux, merci beaucoup. Merci beaucoup. Vous êtes un homme merci – user372013

Questions connexes