测试Django ModelForm是否有实例

Nat*_*tim 29 django django-models django-forms

如果我进入编辑表单,我想显示一条警告消息,如果我是Django ModelForm的创建形式,则隐藏它.

form.is_bound 告诉我表单是否先前已填充,但如何测试ModelForm是否设置了现有实例?

我试过这个,hasattr(form.instance, 'pk')但这是正确的方法吗?

干杯,

Natim

Ala*_*air 51

请检查是否form.instance.pkNone.

hasattr(form.instance, 'pk')将始终返回True,因为每个模型实例都有一个pk字段,即使它尚未保存到数据库中.


WeZ*_*ard 8

由于现有实例将作为带有关键字的参数传递instance以创建模型表单,因此您可以在自定义初始值设定项中观察到这一点。

class Foo(ModelForm):
    _newly_created: bool

    def __init__(self, *args, **kwargs):
        self._newly_created = kwargs.get('instance') is None
        super().__init__(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)