2016-04-14 50 views
1

我正在研究一個Django W project項目,我有時會在'after_edit_page'鉤子中更改頁面數據。我所做的是爲ForeignKey關係設置一個值,其中該對象是Snippet。當我更新頁面字段時,我可以在活動頁面中正確看到這些更改,因此模型已正確保存。但是當我進入編輯界面時,我看不到SnippetChooserPanel中仍然爲空的相同更改。以編程方式更新W editing中的編輯界面

由於這是頁面編輯器非常混亂,我想知道如何以編程方式更新管理中的編輯器面板?

回答

2

發生這種情況是因爲在編輯頁面後,頁面的草稿已保存到wagtailcore.PageRevision表中。當您返回編輯頁面時,此草稿將用於填充管理員表單。草稿在'after_page_edit'信號被觸發前保存,因此對Page的任何修改都不會包含在PageRevision中,因此下次加載管理界面時不會出現。

相反,您可以覆蓋用於頁面模型的形式,使用(目前無證,不好意思)功能:

from wagtail.wagtailadmin.forms import WagtailAdminPageForm 
from wagtail.wagtailcore.models import Page 

class MyPageForm(WagtailAdminPageForm): 
    def clean(self): 
     cleaned_data = super(MyPageForm, self).clean() 
     # Set the snippet to a new value 
     cleaned_data['snippet'] = MySnippet.objects.get() 
     return cleaned_data 

class MyPage(Page): 
    # Your fields, etc here... 

    base_form_class = MyPageForm 

這個功能確實需要一個最近的(1.4.3+)版本鶺鴒,以工作。

+0

謝謝!我已經在研究自定義表單解決方案,我在Github的問題跟蹤器中看到了這個方案。非常感激! – dentemm