Python django自定义表单getting _init__;()最多接受2个参数(给定3个)错误
我有以下表格:Python django自定义表单getting _init__;()最多接受2个参数(给定3个)错误,python,django,django-forms,Python,Django,Django Forms,我有以下表格: class QuestionForm(forms.Form): options = forms.ModelMultipleChoiceField(queryset=Option.objects.none(), widget=forms.RadioSelect) def __init__(self, question_id=None): if question_id:
class QuestionForm(forms.Form):
options = forms.ModelMultipleChoiceField(queryset=Option.objects.none(),
widget=forms.RadioSelect)
def __init__(self, question_id=None):
if question_id:
super(QuestionForm, self).__init__()
question = Question.objects.get(pk=question_id)
self.fields['options'].queryset = Option.objects.filter(question = question)
在我看来,我正在调用表单以获取用户在帖子中选择的内容,如下所示:
if request.method == "POST":
form = QuestionForm(request.POST, question.id)
if form.is_valid():
print form
然后我得到以下错误:
__init__() takes at most 2 arguments (3 given)
对于这一行:
form=QuestionForm(request.POST,question.id)
错误正是它所说的:您的QuestionForm.\uuuu init\uuuuu
只接受两个参数(self
和question\uid
),但您给了它三个(self
(它总是提供给实例方法),request.POST
和question.id
。您的\uuuu init\uuuu
方法需要使用另一个参数才能工作,例如:
def __init__(self, method, question_id):
现在,它可以在所有情况下工作,而不仅仅是针对您的特定表单。好吧,您的表单确实只包含两个参数;
self
和question\id
,但是您的代码也会传入request.POST
。@MartijnPieters我怎样才能让它也接收帖子,以便我可以验证表单?在您的表单中添加另一个参数\uuuu init\uuuu
方法,也许?谢谢!方法参数是什么?调用时使用request.POST
,所以我认为这个名称很合适。不过,您可以随意命名它。
def __init__(self, question_id=None, *args, **kwargs):
super(QuestionForm, self).__init__(*args, **kwargs)