我正在尝试构建自定义 Django 表单来更改应用程序的用户名和用户电子邮件。这就是为什么我需要将用户详细信息从 session 传递到表单以检查登录用户是否存在的原因。我是这样做的:
在 views.py 中
personal_info_form = PersonalInfoForm(prefix='personal_info',
user_details=user_details)
其中 user_details
是一个字典:
'user_details': [{'username': u'username',
'registration_date': datetime.date(2009, 10, 22),
'id': 13, 'email': u'user@mail.com'}]}
在 forms.py 中,我有以下代码:
class PersonalInfoForm(forms.Form):
def __init__(self, *args, **kwargs):
user_details = kwargs.pop('user_details', None)
super(PersonalInfoForm, self).__init__( *args, **kwargs)
username = forms.CharField(required=True, initial=user_details[0]['username'])
email = forms.EmailField(required=True)
我收到以下错误:
name 'user_details' is not defined
我尝试使用 self.user_details
访问它并且只使用 user_details
并且它给了我同样的错误
最佳答案
user_details
被传递给 __init__
,因此未在其外部定义。这就是为什么在实例化 CharField 对象时无法访问它的原因。在 __init__
本身中设置 initial
,例如,在你从 kwargs 弹出它之后:
class PersonalInfoForm(forms.Form):
username = forms.CharField(required=True)
email = forms.EmailField(required=True)
def __init__(self, *args, **kwargs):
user_details = kwargs.pop('user_details', None)
super(PersonalInfoForm, self).__init__(*args, **kwargs)
if user_details:
self.fields['username'].initial = user_details[0]['username']
如果有机会,请考虑阅读 scopes in python .
关于django - 将 **kwargs 传递给 Django Form,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1993014/