Django 摇尾工厂男孩测试失败:类型错误:字段';id';需要一个数字,但得到{}
我正试着为一个摇尾网站建立一个工厂男孩。为了使其正常工作,_create方法必须能够在页面之间建立父子关系。我重写了文档中描述的_create方法:。但是添加“parent”键会导致错误 已经看了很久了,深入到源文件中。我怀疑这与model_类方法通过kwargs的方式有关,但我想我现在对任何明显的错误都视而不见。任何帮助都将不胜感激 models.py: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
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_工厂:非常主动!你的话让我看得更清楚,当我的测试变得更复杂时,我一定会考虑使用它。谢谢