子类化 django choicefield 不起作用
Subclassing django choicefield doesn't work
我正在尝试对 ChoiceField 进行子类化,以便我可以以多种形式使用它 (DRY)。例如:
class testField(forms.ChoiceField):
choices = (('a', 'b'), ('c', 'd'))
label = "test"
class testForm(forms.Form):
test = testField()
其他类型的字段作为子类(例如 CharField)工作,但是在渲染 ChoiceField 的子类时出现一个模糊的错误:
AttributeError at /..url.../
'testField' object has no attribute '_choices'
在子类中指定choices
为_choices
不报错,渲染中也不显示内容
不要弄乱 Field
的 class 属性,choices
是 ChoiceField
实例的属性。按照 docs:
中的建议改写 __init__(...)
class TestField(ChoiceField):
def __init__(self, *args, **kwargs):
kwargs['choices'] = ((1, 'a'), (2, 'b'))
kwargs['label'] = "test"
super(TestField, self).__init__(*args, **kwargs)
class TestForm(Form):
test = TestField()
f = TestForm()
f.fields['test'].choices
> [(1, 'a'), (2, 'b')]
f.fields['test'].label
> 'test'
我正在尝试对 ChoiceField 进行子类化,以便我可以以多种形式使用它 (DRY)。例如:
class testField(forms.ChoiceField):
choices = (('a', 'b'), ('c', 'd'))
label = "test"
class testForm(forms.Form):
test = testField()
其他类型的字段作为子类(例如 CharField)工作,但是在渲染 ChoiceField 的子类时出现一个模糊的错误:
AttributeError at /..url.../
'testField' object has no attribute '_choices'
在子类中指定choices
为_choices
不报错,渲染中也不显示内容
不要弄乱 Field
的 class 属性,choices
是 ChoiceField
实例的属性。按照 docs:
__init__(...)
class TestField(ChoiceField):
def __init__(self, *args, **kwargs):
kwargs['choices'] = ((1, 'a'), (2, 'b'))
kwargs['label'] = "test"
super(TestField, self).__init__(*args, **kwargs)
class TestForm(Form):
test = TestField()
f = TestForm()
f.fields['test'].choices
> [(1, 'a'), (2, 'b')]
f.fields['test'].label
> 'test'