簡體   English   中英

測試Django ModelForm是否在定制模型上具有實例

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM