2016-11-16 64 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