2015-08-18 27 views
0

我正在研究Django框架。 现在我正在为下面的用户注册一个类。 我在行号码6上遇到错误。 您能否给予一些帮助?Django View Class:name'self'未定义

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 
+5

'self' **不是**在类名称空间中定义的(它通常指的是一个实例,在类定义完成之前您不可能拥有该实例)。鉴于'makeYearChoice'实际上并没有使用任何类/实例属性,为什么不把它作为一个独立的函数呢? – jonrsharpe

+0

我只是想作为一个类的成员函数。我想知道如何工作的成员职能。 – eachone

+1

...什么?在你试图调用'makeYearChoice'的时候,你还没有定义它**! – jonrsharpe

回答

3

这与Django无关;您的类定义的身体有它自己的命名空间,并运行在书写顺序,所以在这一点:

class JoinForm(forms.Form): 
    ... 
    YEAR = self.makeYearChoice(self,1940) # here 
    ... 

不仅没有定义selfmakeYearChoice不是非此即彼!您可以修复两种方法之一这个方法,要么:

  1. 移动的方法定义以上类属性的设置,并调用它直接

    class JoinForm(forms.Form): 
        ... 
        def makeYearChoice(self, startYear): # define the method first 
         ... 
    
        YEAR = makeYearChoice(None,1940) # don't have an instance, but who cares? 
        ... 
    

    这让你有多余的实例方法一旦定义了类;或

  2. 使它成为一个独立的功能,只是把它叫做类中:

    def makeYearChoice(startYear): 
        ... 
    
    class JoinForm(forms.Form): 
        ... 
        YEAR = makeYearChoice(1940) # no fuss about self argument 
        ... 
    

我强烈赞成后者。另外,您应该阅读the style guide;方法和属性名称通常为lowercase_with_underscores,逗号后应该有空格。

+0

谢谢!你的文章是我想知道的!再次感谢。 – eachone

+1

@eachone http://stackoverflow.com/help/someone-answers – jonrsharpe

相关问题