Django 摇尾工厂男孩测试失败:类型错误:字段';id';需要一个数字,但得到{}

Django 摇尾工厂男孩测试失败:类型错误:字段';id';需要一个数字,但得到{},django,wagtail,factory-boy,Django,Wagtail,Factory Boy,我正试着为一个摇尾网站建立一个工厂男孩。为了使其正常工作,_create方法必须能够在页面之间建立父子关系。我重写了文档中描述的_create方法:。但是添加“parent”键会导致错误 已经看了很久了,深入到源文件中。我怀疑这与model_类方法通过kwargs的方式有关,但我想我现在对任何明显的错误都视而不见。任何帮助都将不胜感激 models.py: from wagtail.core.models import Page class HomePage(Page): pass

我正试着为一个摇尾网站建立一个工厂男孩。为了使其正常工作,_create方法必须能够在页面之间建立父子关系。我重写了文档中描述的_create方法:。但是添加“parent”键会导致错误

已经看了很久了,深入到源文件中。我怀疑这与model_类方法通过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

我可以推荐wagtail工厂吗

设立:
pip安装摇尾工厂

factories.py中

import wagtail_factories

from .models import HomePage, SubjectPage

class HomePageFactory(wagtail_factories.PageFactory):
    class Meta:
        model = HomePage

class SubjectPageFactory(wagtail_factories.PageFactory):
    class Meta:
        model = SubjectPage
from django.test import TestCase


class PagesTestCase(TestCase):
    def test_create(self):
        instance = HomePageFactory.create()
        self.assertIsNotNone(instance.pk)
tests.py中

import wagtail_factories

from .models import HomePage, SubjectPage

class HomePageFactory(wagtail_factories.PageFactory):
    class Meta:
        model = HomePage

class SubjectPageFactory(wagtail_factories.PageFactory):
    class Meta:
        model = SubjectPage
from django.test import TestCase


class PagesTestCase(TestCase):
    def test_create(self):
        instance = HomePageFactory.create()
        self.assertIsNotNone(instance.pk)
如果您想测试具有某种结构的页面,下面的代码将创建一个主页作为站点的根,并创建一个主题页面作为主页的子页面

from wagtail.core.models import Site
from .factories import HomePageFactory, SubjectPageFactory

class PageTestCase(TestCase):
    def setUp(self):
        self.homepage = HomePageFactory.create()
        self.site = Site.objects.all().first()
        self.site.root_page = self.homepage
        self.site.save()
        self.site.refresh_from_db()
        self.subject_page = SubjectPageFactory.create(parent=self.homepage)

我终于让它工作了;这是我的网站根的问题。我已经注意到wagtail_工厂:非常主动!你的话让我看得更清楚,当我的测试变得更复杂时,我一定会考虑使用它。谢谢