2011-09-22 25 views
1

我試圖複製我的Page模型的實例並將新頁面的狀態設置爲「草稿」。此代碼在Django shell中完美工作,但在其所在的管理操作中,會創建一個新實例,但狀態不會更新。複製模型的實例並更新字段

for page in pages: 
     page.pk, page.id = None, None 
     page.save() 
     page.status = Page.DRAFT 
     page.updated_at = datetime.now() 
     page.save(force_update=True) 

因此,上面的代碼創建一個新的頁面,但不會改變它的狀態。

我認爲它可能與頁面具有代理模型有關,具體取決於狀態(PublishedPage,DraftPage等)。但我不確定問題出在哪裏。

+0

爲什麼'page.save()'在所有屬性設置之前? –

+0

我只是想確保我沒有保存沒有主鍵的模型。 「 – tocf

+0

」沒有保存沒有主鍵的模型?「當Django的ORM不存在時,它會爲你創建密鑰。當確實存在時進行更新。 –

回答

1

不要。

for page in pages: 
    new_page= Page.objects.create(
     this= page.this, that=page.that, ... 
     status= Page.DRAFT) 

簡單得多。更清楚。它實際上是有效的。

+0

我希望有一個解決方案,如果頁面的模式發生變化,我不必更改此代碼。 – tocf

+0

@tocf:「如果頁面的模式發生了變化,則不必更改此代碼」一般來說,這是無法實現的。最小化代碼的想法變化是一個有吸引力的麻煩。模式更改總是會導致代碼更改。否則,爲什麼要更改模式呢? –

+0

是的,但該模型也有字段的_lot_。 – tocf

0

事實證明,代理模型子類化頁有自定義保存方法覆蓋我的更新。

相關問題