我有一个这样的课。
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)
我想在课堂创作过程中传递这个元组。
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)。
有什么想法吗?
答案 0 :(得分:1)
ModelMultipleChoiceField期望查询集作为其第一个参数(在self之后)。你想要的是一个常规的MultipleChoiceField。
我还将args / kwargs传递给超类 init ,这是一个很好的做法,因为表单可以使用很多有用的参数,例如' initial' ,你可能想用一些时间,然后当它不起作用时它会让你疯狂...
#include <iostream>
#include <string>
using namespace std;
class Cat
{
public:
Cat();
~Cat();
int GetAge() { return itsAge; }
void SetAge(int age) { itsAge = age; }
private:
int itsAge;
};
Cat::Cat() : itsAge(0)
{
}
Cat::~Cat()
{
}
int main(int argc, char* argv[])
{
Cat *cats = new Cat[5];
for( int i = 0; i < 5; ++i )
{
cats[i].SetAge( i + 1 );
}
//Here cats points to the first cat so, it will print 2
cout << cats[1].GetAge()<< endl;
//Now cat will be pointing to second cat as pointer will be moved forward by one
cats = cats + 1;
//below statement will print 3, as cats[0] is pointing to 2nd cat, and cats[1] will be pointing to 3rd cat
cout << cats[1].GetAge()<< endl;
return 0;
}