Я пытаюсь настроить Factory Boy для сайта Wagtail. Чтобы это работало, метод _create должен иметь возможность установить sh отношения родитель-ребенок между страницами. Я переопределяю метод _create, как описано в документации: https://factoryboy.readthedocs.io/en/latest/reference.html#attributes -and-method . Но добавление «родительского» ключа вызывает ошибку.
Давно искал его, копался в исходных файлах. Я подозреваю, что это связано с тем, как метод model_class пропускает kwargs, но я полагаю, что я до сих пор не замечаю никаких очевидных ошибок. Любая помощь будет принята с благодарностью!
models.py:
from wagtail.core.models import Page
class HomePage(Page):
pass
class SubjectPage(Page):
pass
tests.py:
from .factories import HomePageFactory, SubjectPageFactory
from django.test import TestCase
class TestModels(TestCase):
@classmethod
def setUpTestData(cls):
cls.homepage = HomePageFactory(title='Test page')
cls.subjectpage = SubjectPageFactory(parent=cls.homepage)
def test_dummy(self):
self.assertTrue(True)
factories.py:
import factory
from .models import HomePage, SubjectPage
from wagtail.core.models import Page
class PageFactory(factory.django.DjangoModelFactory):
class Meta:
abstract = True
@classmethod
def _create(cls, model_class, *args, **kwargs):
try:
parent = kwargs.pop('parent')
page = model_class(*args, kwargs)
except KeyError:
parent = Page.get_first_root_node()
page = model_class(*args, **kwargs)
parent.add_child(instance=page)
return page
class HomePageFactory(PageFactory):
class Meta:
model = HomePage
class SubjectPageFactory(PageFactory):
class Meta:
model = SubjectPage