为什么我的表单总是未绑定?

3 投票
2 回答
2621 浏览
提问于 2025-04-17 10:21

我刚开始学习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

撰写回答