如果我进入编辑表单,我想显示一条警告消息,如果我是Django ModelForm的创建形式,则隐藏它。
form.is_bound
告诉我表单是否先前已填充,但如何测试是否使用现有实例设置了ModelForm?
我试过这个hasattr(form.instance, 'pk')
,但这是正确的方法吗?
干杯,
Natim
答案 0 :(得分:48)
尝试检查form.instance.pk
是否为None
。
hasattr(form.instance, 'pk')
将始终返回True
,因为每个模型实例都有一个pk
字段,即使它尚未保存到数据库中。
答案 1 :(得分:3)
我遇到了这个问题,但就我而言,我正在使用UUID作为PK。尽管在大多数情况下可接受的答案是正确的,但是如果您未使用Django默认自动增量PK,则失败。
定义模型属性使我能够从模型,视图和模板这两个属性中访问该值作为模型的属性
@property
def from_database(self):
return not self._state.adding
答案 2 :(得分:1)
由于现有实例将作为带有关键字instance
的参数传递以创建模型表单,因此您可以在自定义初始值设定项中观察到这一点。
class Foo(ModelForm):
_newly_created: bool
def __init__(self, *args, **kwargs):
self._newly_created = kwargs.get('instance') is None
super().__init__(*args, **kwargs)