[英]Test if Django ModelForm has instance on customized model
相關問題: 測試Django ModelForm是否具有實例
根據上面的問題,我們可以檢查一個模型hasattr(form.instance, 'pk')
是否具有hasattr(form.instance, 'pk')
instance
,因為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
在is_valid()
之后,實例具有pk
屬性:
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的模式是否為“對現有條目進行編輯” /“對數據庫的新條目”?
如果您的模型具有主鍵列,則該模型的pk
屬性將始終存在,並且將是該字段的別名。
在您的情況下,您不想檢查form.instance
是否具有名為pk
的屬性(這是hasattr
行)。 相反,您必須檢查form.instance
的屬性pk
form.instance
為空:
data = {'myid': '123'}
form = MyModelForm(data=data, instance=None)
form.is_valid()
if form.instance.pk:
print('This has a pk! It was saved before!')
else:
print('This has no pk! It was never saved!')
如果它是一個尚未保存的新模型,則form.instance.pk
字段的值將為u''
(空字符串),在if語句中其值為False
,這將執行您的工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.