在 Python 中将元组传递给 __init__
Passing Tuple into __init__ in Python
我有一个class这样的。
class AddNoteForm(forms.Form):
def __init__(self, test_values, *args):
self.custom_choices = test_values
super(AddNoteForm, self).__init__()
self.fields['choices'] = forms.ModelMultipleChoiceField(label='Test Choices', choices=self.custom_choices)
我想在 class 创建期间传递这个元组。
test_values = (
('name1', 'value1'),
('name2', 'value2'),
('name3', 'value3'),
)
form = AddNoteForm(test_values)
但每当我这样做时,我都会得到 __init__() takes at least 2 arguments (2 given)
错误。我也在使用 python 2.7(和 Django 1.8)。
我查看调试页面中的变量,self.custom_choices 包含正确的值(test_values 我传递给函数的值)。
有什么想法吗?
ModelMultipleChoiceField 需要一个查询集作为它的第一个参数(在 self 之后)。您在这里需要的是一个常规的 MultipleChoiceField。
我还把 args/kwargs 传递给超类 init,这是一个很好的做法,因为表单可以采用很多有用的参数,例如 'initial',你可能想要使用一些时间,然后当它不起作用时它会让你发疯......
class AddNoteForm(forms.Form):
def __init__(self, test_values, *args, **kwargs):
self.custom_choices = test_values
super(AddNoteForm, self).__init__(*args, **kwargs)
self.fields['choices'] = forms.MultipleChoiceField(
label='Test Choices',
choices=self.custom_choices
)
我有一个class这样的。
class AddNoteForm(forms.Form):
def __init__(self, test_values, *args):
self.custom_choices = test_values
super(AddNoteForm, self).__init__()
self.fields['choices'] = forms.ModelMultipleChoiceField(label='Test Choices', choices=self.custom_choices)
我想在 class 创建期间传递这个元组。
test_values = (
('name1', 'value1'),
('name2', 'value2'),
('name3', 'value3'),
)
form = AddNoteForm(test_values)
但每当我这样做时,我都会得到 __init__() takes at least 2 arguments (2 given)
错误。我也在使用 python 2.7(和 Django 1.8)。
我查看调试页面中的变量,self.custom_choices 包含正确的值(test_values 我传递给函数的值)。
有什么想法吗?
ModelMultipleChoiceField 需要一个查询集作为它的第一个参数(在 self 之后)。您在这里需要的是一个常规的 MultipleChoiceField。
我还把 args/kwargs 传递给超类 init,这是一个很好的做法,因为表单可以采用很多有用的参数,例如 'initial',你可能想要使用一些时间,然后当它不起作用时它会让你发疯......
class AddNoteForm(forms.Form):
def __init__(self, test_values, *args, **kwargs):
self.custom_choices = test_values
super(AddNoteForm, self).__init__(*args, **kwargs)
self.fields['choices'] = forms.MultipleChoiceField(
label='Test Choices',
choices=self.custom_choices
)