我正在尝试添加自定义表单字段模型参数,但收到错误__init__() got an unexpected keyword argument 'nginit'
:
我的领域:
self.fields['formdata.name'] = forms.CharField(label = 'Your name', nginit = None, required = True, max_length = 100)
我的子类修饰符:
from django import forms
old_build_field = forms.fields.Field
class build_field(old_build_field):
def __init__(self, nginit = False, *args, **kwargs):
super(build_field, self).__init__(*args, **kwargs)
self.nginit = nginit
forms.fields.Field = build_field
答案 0 :(得分:0)
据推测,您正在尝试monkeypatch基本Field类,希望像CharField这样的子类将继承新类。不幸的是,这不是它的工作原理。所有类继承都是在导入时执行的,因此CharField将始终继承原始的Field类,而不是monkeypatched版本。
稍微更好的方法是直接monkeypatch Field的__init__
方法,因为只有在实例化类时才会调用它。尽管如此,您还需要确保在表单定义本身之前完成了monkeypatching:由于CharField直接在表单级别实例化,因此将再次在导入时完成。但是,只要在表单模块之前完成修改,它就应该可以工作。
我必须说,有可能有更好的方法。例如,您可以直接在表单自己的init方法中为每个字段添加nginit参数。