【发布时间】:2014-02-06 09:23:09
【问题描述】:
我正在尝试为具有 OneToOne 关系的 Django 模型设置一些工厂,它们的行为方式似乎与外键不同。
运行我的单元测试时,主模型没有设置它的关系。
我的模型:
class ThePlan(models.Model):
user = models.ForeignKey("User")
creationdate = models.DateField(auto_now_add=True)
class OldPlan(models.Model):
plan = models.OneToOneField("ThePlan")
theplan = CharField(max_length = 200,)
class NewPlan(models.Model):
plan = models.OneToOneField("ThePlan")
theplan = CharField(max_length = 200,)
我的工厂:
class ThePlanFactory(factory.DjangoModelFactory):
FACTORY_FOR = "mysite.PlanModel"
user = factory.SubFactory(UserFactory)
class OldPlanFactory(factory.DjangoModelFactory):
FACTORY_FOR = "mysite.OldModel"
plan = factory.RelatedFactory(ThePlanFactory)
theplan = ''
class NewPlanFactory(factory.DjangoModelFactory):
FACTORY_FOR = "mysite.NewModel"
plan = factory.RelatedFactory(ThePlanFactory)
theplan = ''
在我的测试setUp() 中,我正在执行以下操作;
def setUp(self):
self.user = factories.UserFactory.create()
self.plan = factories.ThePlanFactory.create(
user=self.user
)
self.oldplan = factories.OldPlanFactory.create(
plan=self.plan
)
self.newplan = factories.NewPlanFactory.create(
plan=self.plan
)
因此,当我运行包含此内容的测试时,我得到了DoesNotExist: ThePlan has no OldPlan。
我哪里错了?问题是我立即打电话给create 而我应该用build 设置工厂,设置关系,然后打电话给save?
【问题讨论】:
-
@danihp 很好发现!我把它写成
main,model1,model2并意识到这是一个无聊的例子,所以中途改变了,错过了那个!谢谢。 -
ThePlanFactory但OldPlanFactory似乎有问题。你能告诉我们哪里(哪一行设置)引发错误?
标签: python django factory one-to-one factory-boy