我正在尝试为拥有OneToOne关系的Django模型建立一些工厂。它们似乎与外键的行为方式不同。
运行我的unittest时,主模型没有设置它的关系。
我的模特:
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
?
答案 0 :(得分:1)
所以我的问题与时间和2个依赖工厂的创建有关。
不是直接调用它们上的create,而是在设置plan
关系后设置它们并保存对象。以下是我需要的工作;
def setUp(self):
self.user = factories.UserFactory.create()
self.plan = factories.ThePlanFactory.create(
user=self.user
)
self.oldplan = factories.OldPlanFactory()
self.oldplan.plan = self.plan
self.oldplan.save()
self.newplan = factories.NewPlanFactory()
self.newplan.plan = self.plan
self.newplan.save()