2016-11-16 51 views
2

我有在鶺鴒一個ContentPage模型和其他ContentPage模型鏈接到一個ContentPage模型RelatedPost有點像這樣:測試中鶺鴒相關頁面

class ContentPage(Page): 
    summary = RichTextField(blank=True) 
    body = RichTextField(blank=True) 
    published = models.DateTimeField(default=timezone.now()) 

    content_panels = Page.content_panels + [ 
     FieldPanel('summary'), 
     FieldPanel('body', classname="full"), 
     InlinePanel('related_page', label="Related Content"), 
    ] 

    settings_panels = Page.settings_panels + [ 
     FieldPanel('published'), 
    ] 

class RelatedPost(Orderable): 
    post = ParentalKey(
     'ContentPage', 
     related_name='related_page' 
    ) 
    page = models.ForeignKey(
     'ContentPage', 
     null=True, 
     blank=True, 
     on_delete=models.SET_NULL, 
     related_name="+" 
    ) 
    panels = [ 
     FieldPanel('page') 
    ] 

當我運行這個測試:

class ContentPageTests(WagtailPageTests): 
    def test_can_create_article_page(self): 
     self.assertCanCreateAt(ContentIndexPage, ContentPage) 

     # content_index is just a parent page 
     content_index = self.create_content_index_page() 
     self.assertCanCreate(content_index, ContentPage, { 
      'title': 'Test Article', 
      'published': datetime.datetime.now() 
     }) 

我得到一個錯誤說:

django.core.exceptions.ValidationError: ['ManagementForm data is missing or has been tampered with']

管理工作正常。我可以保存相關頁面等,當我註釋掉InlinePanel線時,它工作正常。

+0

的問題不在於觀點或模型,但在窗體或formset的設置,所以你需要發佈形式.py文件和您的視圖,從中獲取表單。 –

回答

2

傳遞給assertCanCreate的數據需要與發佈到W admin管理員中的「編輯頁面」表單的表單提交格式相匹配。對於InlinePanel中的子模型,Wagtail使用Django formset來處理它 - 請參閱https://docs.djangoproject.com/en/1.10/topics/forms/formsets/#formset-validation - 因此您需要提供Django formset邏輯所期望的所有字段,包括management form。即通過驗證最簡單的情況是一種管理形式,簡單地報告說,有沒有孩子的形式:

self.assertCanCreate(content_index, ContentPage, { 
     'title': 'Test Article', 
     'published': datetime.datetime.now(), 
     'related_page-TOTAL_FORMS': 0, 
     'related_page-INITIAL_FORMS': 0, 
     'related_page-MAX_NUM_FORMS': 999, 
    }) 
+0

完美。謝謝@gasman! – hammygoonan