Тестирование связанной страницы в Трясогузке

У меня есть модель ContentPage в трясогузке и модель RelatedPost, которая связывает другие модели ContentPage с ContentPage примерно так:

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, все работает нормально.


person hammygoonan    schedule 16.11.2016    source источник
comment
Проблема не в представлениях или моделях, а в настройках формы или набора форм, поэтому вам нужно опубликовать файл forms.py и ваше представление, из которого форма отображается.   -  person Prakhar Trivedi    schedule 16.11.2016
comment
Кроме того, вы не определили create_content_index_page в своем коде?   -  person kbdev    schedule 11.04.2018


Ответы (1)


Данные, переданные в assertCanCreate, должны соответствовать формату отправки формы, публикуемой в форме «страница редактирования» в администраторе трясогузки. Для дочерней модели в InlinePanel Wagtail обрабатывает это с помощью набора форм Django — см. https://docs.djangoproject.com/en/1.10/topics/forms/formsets/#formset-validation - поэтому вам нужно указать все поля, которые ожидает логика набора форм Django, включая форму управления. Самый простой случай, прошедший проверку, — это форма управления, которая просто сообщает, что дочерних форм нет:

   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,
    })
person gasman    schedule 16.11.2016