[英]Passing **kwargs to Django Form
我正在尝试构建自定义django表单以更改应用程序的用户名和用户电子邮件。 这就是为什么我需要将会话中的用户详细信息传递给表单以检查记录的用户是否存在。 我这样做:
在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对象时无法访问它的原因。 在你从kwargs中弹出后,在__init__
设置initial
,例如:
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']
当你有机会时,考虑阅读python中的范围 。
你能以更清楚的方式解释你想做什么吗? 我相信你所做的事情是不必要的。 不确定我是否理解你,但看看Django Model Forms: http : //docs.djangoproject.com/en/dev/topics/forms/modelforms/
>>> from django.forms import ModelForm
# Create the form class.
>>> class ArticleForm(ModelForm):
... class Meta:
... model = Article
# Creating a form to add an article.
>>> form = ArticleForm()
# Creating a form to change an existing article.
>>> article = Article.objects.get(pk=1)
>>> form = ArticleForm(instance=article)
如果它是您正在寻找的,您可以轻松添加以使用您的用户模型。 请记住,您可以选择要允许更改的字段。 instance
参数设置初始字段值(这是我理解你想要做的)。 上面的示例将显示所有字段,下面的示例显示如何仅显示2个字段。
class PartialAuthorForm(ModelForm):
class Meta:
model = Author
fields = ('name', 'title')
希望我帮了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.