2017-05-02 3 views
0

Ich habe dieses Problem beim Erstellen eines Formulars mit Django konfrontiert.Wie behält man den Wert einer globalen Variable nach der Initialisierung im Konstruktor in Python?

class DetailForm(forms.Form): 
    row_id = 2 

    def __init__(self, *args, **kwargs): 
     global row_id 
     row_id = kwargs.pop('r_id') 
     super(DetailForm, self).__init__(*args, **kwargs) 

    row=Prewash.objects.get(id=row_id) 
    id = forms.CharField(label='ID',initial=row_id, widget=forms.TextInput(attrs={'readonly':'readonly'})) 

Hier im init() die globale Variable row_id aktualisiert wird. Aber es wird nicht in der letzten Zeile angezeigt, wenn ich versuche, den Wert aus der Datenbank abzurufen.

Ich brauche einen Weg, um den Wert der Variablen zu behalten, die ich versuche, innerhalb des Konstruktors zu setzen (ohne Instanz oder Methoden zu verwenden).

+2

was willst du genau hier tun? warum nicht einfach den Wert 'self.row_id' zuweisen, anstatt globale Variablen zu deklarieren? – v1k45

+0

Ich habe die Frage bearbeitet, um Ihre Antwort zu beantworten. Ich kann die Selbstinstanz nicht erstellen, da ich außerhalb des Konstruktors oder der Funktion die Selbstinstanz nicht verwenden kann. Hier versuche ich eine dynamische Form zu erstellen. –

Antwort

0

Wenn Sie Feld basiert Attribute ändern möchten Auf dem Formularkontext können Sie das tun, indem Sie auf dieses spezifische Feld in der __init__-Funktion zugreifen und dieses aktualisieren.

So etwas sollte funktionieren:

class DetailForm(forms.Form): 
    id = forms.CharField(label='ID', widget=forms.TextInput(attrs={'readonly':'readonly'})) 

    def __init__(self, *args, **kwargs): 
     row_id = kwargs.pop('r_id', 2) 
     super(DetailForm, self).__init__(*args, **kwargs) 

     self.fields['id'].initial = row_id 
+0

Yeah! Vielen Dank. Ich denke, das könnte funktionieren. Will versuchen und lassen Sie es wissen @ v1k45 –

+0

Habe versucht und es hat funktioniert. Vielen Dank! @ v1k45 –

0

In einer Python-Klasse verwenden wir Objektattribute oder statische Attribute. wenn Sie den Zugriff Objektattribute Sie

self.<attribtute_name> 

verwenden, und wenn Sie statische Eigenschaften, die wir

verwenden zugreifen möchten
<<ClassName>>.<<attribute_name>> 

Siehe diesen Link Static class variables in Python

+0

Nun, ich habe den Code entsprechend geändert. def __init __ (self, * args, ** kwargs): DetailForm.row_id = kwargs.pop ('r_id') row = Prewash.objects.get (id = DetailForm.row_id) Aber jetzt bekomme ich ein error: row = Prewash.objects.get (id = DetailForm.row_id) NameError: Name 'DetailForm' ist nicht definiert –

Verwandte Themen