【发布时间】:2015-11-24 06:53:02
【问题描述】:
相关问题:Test if Django ModelForm has instance
根据上面的问答,我们可以检查一个modelform是否有 hasattr(form.instance, 'pk')的实例,因为instance必须有pk。
我误解了相关问题。它说
尝试检查
form.instance.pk是否为None。
但是在我的例子中,模型的主键被自定义为:
class MyModel(Model):
myid = models.CharField(max_length=10, primary_key=True)
...
还有模型形式:
class MyModelForm(ModelForm):
class Meta:
model = MyModel
在实例上具有pk 属性,在is_valid() 之后:
data = {'myid': '123'}
form = MyModelForm(data=data, instance=None)
form.is_valid()
if form.instance.pk is not None:
print('detect: modelform received an instance')
else:
print('detect: modelform didnt receive an instance')
我的问题是:
在这种情况下,如何检查模型表单是否使用现有实例设置?
或者,如何检查modelform的模式是“edit on existing entry”/“new entry to our DB”?
【问题讨论】:
-
pk只是您的私钥myid的代理名称。它代表db中的同一个字段。 -
您没有正确阅读链接的答案。它特别指出不要使用 hasattr,因为它总是返回 True。
-
@DanielRoseman 啊...是的,你是对的。