2016-04-14 12 views
1

Düzenleme arabirimini program aracılığıyla güncellerken, bazen bir "after_edit_page" kopyasında Sayfa verilerini değiştirdiğim bir Django Wagtail projesinde çalışıyorum. Benim yaptığım şey, bu nesnenin bir Parçacık olduğu bir ForeignKey ilişkisi için bir değer belirlemektir. Bir Sayfa alanını güncellediğimde, bu değişiklikleri canlı sayfada doğru bir şekilde görebiliyorum, böylece Model doğru şekilde kaydedilmiş oluyor. Ancak düzenleme arayüzüne gittiğimde, hala boş olan SnippetChooserPanel'de aynı değişikliği göremiyorum.Wagtail

Sayfa editörleri için bu çok kafa karıştırıcı olduğundan, yönetici panelindeki düzenleyici panelleri nasıl programlayabildiğimi merak ediyordum?

cevap

2

Bu, bir sayfayı düzenledikten sonra sayfanın taslağının wagtailcore.PageRevision tablosuna kaydedilmesi nedeniyle oluşur. Bu taslak, daha sonra sayfayı düzenlemek için geri döndüğünüzde yönetici formunu doldurmak için kullanılır. Taslak 'after_page_edit' sinyali tetiklenmeden önce kaydedilir, böylece Sayfadaki herhangi bir değişiklik PageRevision'a dahil edilmeyecektir, bu yüzden yönetici arayüzünü bir sonraki yüklediğinizde görünmeyecektir.

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 

Bu işlevsellik Kuyruksallayan bir son (1.4.3+) sürümünü gerektirir kapsamaz:

Bunun yerine, (şu anda belgesiz, üzgünüm) özelliğini kullanarak, bir sayfa modeli için kullanılan formu geçersiz kılabilir iş.

+0

Teşekkürler! Github'daki konu takipçisinde gördüğüm özel form çözümüne bakıyordum. Çok takdir! – dentemm