python - formularios - Django View Class: el nombre ''self'' no está definido
modelform django (1)
Estoy trabajando en el marco de Django. Ahora estoy haciendo una clase para el registro de usuarios como a continuación. Recibí un error en el número de línea 6. ¿Podrían ayudarme?
1: class JoinForm(forms.Form):
2: MONTH = {
3: 1:(''Jan''), 2:(''Feb''), 3:(''March''), 4:(''Apl''), 5:(''May''), 6:(''Jun''),
4: 7:(''July''), 8:(''Aug''), 9:(''Sep''), 10:(''Oct''), 11:(''Nov''), 12:(''Dec'')
5: }
6: YEAR = self.makeYearChoice(self,1940)
7: email = forms.EmailField(label=''Email Address'', max_length=50)
8: name = forms.CharField(label=''Real Name'', max_length=20)
9: birth = forms.DateField(label=''Birth Date'', widget=SelectDateWidget(years=YEAR, months=MONTH))
10: loc = forms.CharField(label=''Resident Location'', max_length=40)
11: passwd = forms.CharField(label=''Password'', max_length=16, widget=forms.PasswordInput)
12: def makeYearChoice(self,startYear):
13: YEARS = ();
14: thisYear = datetime.now().year
15: for year in range(startYear,thisYear):
16: YEARS.append(year)
17: return YEARS
Esto no está relacionado con Django; el cuerpo de su definición de clase tiene su propio espacio de nombres, y se ejecuta en el orden escrito, por lo que en este punto:
class JoinForm(forms.Form):
...
YEAR = self.makeYearChoice(self,1940) # here
...
no solo el self
no está definido, ¡ makeYearChoice
tampoco lo es! Podría solucionar esta de dos maneras:
Mueva la definición del método por encima de la configuración del atributo de clase, y llámelo directamente
class JoinForm(forms.Form): ... def makeYearChoice(self, startYear): # define the method first ... YEAR = makeYearChoice(None,1940) # don''t have an instance, but who cares? ...
que te deja con un método de instancia redundante una vez que se define la clase; o
Conviértalo en una función independiente y solo llámalo dentro de la clase:
def makeYearChoice(startYear): ... class JoinForm(forms.Form): ... YEAR = makeYearChoice(1940) # no fuss about self argument ...
Yo preferiría fuertemente esto último. Además, debes leer la guía de estilo ; los nombres de métodos y atributos generalmente son lowercase_with_underscores
, y debe tener espacios después de las comas.