有没有一种明显的方法可以在没有实例设置逻辑的情况下将 aModelForm
转换为常规?Form
我有一个更新/创建 ModelForm 视图,我想SearchView
通过使用来自完全相同的字段列表的输入来查询模型,但它会导致所需字段和类型出现问题,因为它会立即ModelForm
将数据附加到self.instance
。
我最终侵入了元类以获得我想要的东西,但我觉得我很容易在我的眼睛覆盖某些功能之前错过一些解决方案。我真的不喜欢提取核心 django 代码......
其他形式的hackery 会比复制和粘贴整个元类更可取。
class ModelFormMetaclass(type):
def __new__(cls, name, bases, attrs):
formfield_callback = attrs.pop('formfield_callback', None)
try:
parents = [b for b in bases if issubclass(b, ModelToForm)] #<-- here
# ... rest of class
class ModelToForm(BaseForm):
__metaclass__ = ModelFormMetaclass
更新:
它似乎ModelForm._post_clean()
负责实例构造/相关字段验证。
目前,我正在禁用_post_clean()
并查看它将带我去哪里。