2016-04-14 10 views
1

私はDjango Wagtailプロジェクトで作業しています。このプロジェクトでは、「after_edit_page」フックでページデータを変更することがあります。私が行うことは、そのオブジェクトがスニペットであるForeignKeyリレーションの値に設定されます。ページフィールドを更新すると、ライブページでこれらの変更が正しく表示されるため、モデルが正しく保存されます。しかし、私が編集インターフェースに行くと、私はSnippetChooserPanelの同じ変更を見ることができません。これはまだ空です。Wagtailの編集インターフェイスをプログラムで更新する

これはページエディタにとって非常に混乱しているので、私は管理者のエディタパネルをプログラムでどのように更新できるのでしょうか?

答えて

2

これは、ページを編集した後、ページの下書きがwagtailcore.PageRevisionテーブルに保存されるためです。このドラフトは、ページを編集するために戻るときに管理フォームに入力するために使用されます。 「after_page_edit」シグナルがトリガーされる前にドラフトが保存されるため、PageRevisionにページの変更が含まれないため、次回adminインターフェイスをロードしても表示されません。この機能は、セキレイの最近(1.4.3+)バージョンにする必要がありません

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 

代わりに、あなたは(現在は文書化されていない、申し訳ありません)機能を使用して、ページのモデルに使用するフォームを上書きすることができます作業。

+0

ありがとうございます!私は既にGithubの問題追跡ツールで見たカスタムフォームソリューションを探していました。とても有難い! – dentemm

関連する問題