0

有没有一种明显的方法可以在没有实例设置逻辑的情况下将 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()并查看它将带我去哪里。

4

0 回答 0