2010-01-25 40 views
0
from django.core.management import setup_environ 
from register2 import settings 
setup_environ(settings) 


from django import forms 
from django.contrib.auth.forms import AuthenticationForm 
from django.utils.translation import ugettext_lazy as _ 


class AuthenticationRememberMeForm (AuthenticationForm): 

      """ 
      Subclass of Django ``AuthenticationForm`` which adds a remember me checkbox. 

      """ 

      remember_me = forms.BooleanField (
       label = _('Remember Me'), 
       initial = False, 
       required = False, 
       ) 

print AuthenticationRememberMeForm.remember_me 


Traceback (most recent call last): 
    File "D:\zjm_code\register2\b.py", line 26, in <module> 
    print AuthenticationRememberMeForm['remember_me'] 
TypeError: 'DeclarativeFieldsMetaclass' object is unsubscriptable 

回答

1

django forms模塊使用元類來促進表單字段的聲明性語法。因此,您應該考慮remember_me實例字段,而不是類屬性。所以訪問字段作爲這樣是有道理的:

form = AuthenticationRememberMeForm() 
field_obj = form.fields['remember_me'] 

,或者類似的,值:

form = AuthenticationRememberMeForm(data) 
if form.is_valid(): 
    remember_me_value = form.cleaned_data['remember_me'] 

顯然,django.forms還做了一些幕後的工作來實現這一目標。如果你想了解如何,請查看relevant code。如果你只是想讓你的表格工作,請嘗試關注usage outlined in the docs