为什么我的表单总是未绑定?
我刚开始学习Django,想在我的网站上使用django-friends这个工具。
这里有一个来自 django-friends 的表单:
>>> from django import forms
>>> class UserForm(forms.Form):
...
... def __init__(self, user=None, *args, **kwargs):
... self.user = user
... super(UserForm, self).__init__(*args, **kwargs)
...
>>> f = UserForm({})
>>> f.is_bound
False
文档里说“传递一个空字典会创建一个带有空数据的绑定表单”,但为什么结果却是未绑定的(f.is_bound 是 False)呢?
非常感谢!
2 个回答
12
你的 __init__
语句把第一个参数给吞掉了。
把 user=None
从你的初始化语句中去掉,可能可以从 kwargs
中获取这个参数。
class UserForm(forms.Form):
def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user', None)
super(UserForm, self).__init__(*args, **kwargs)
# now the form is actually receiving your first argument: args[0] == {}
5
这里发生的事情是,UserForm
使用第一个参数(user
)来初始化它内部的状态,所以它没有把任何东西传递给 forms.Form
。为了得到预期的效果,你可以传递一个额外的参数:
>>> f = UserForm(None, {})
>>> f.is_bound
True