gpt4 book ai didi

python - 为具有 OnetoOne 关系的 Django 模型创建工厂

转载 作者:太空宇宙 更新时间:2023-11-03 18:36:00 24 4
gpt4 key购买 nike

我正在尝试为 Django 模型设置许多具有 OneToOne 关系的工厂,并且它们的行为方式似乎与外键不同。

运行我的单元测试时,主模型没有设置其关系。

我的模型:

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 吗?

最佳答案

所以我的问题与时间和 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()

关于python - 为具有 OnetoOne 关系的 Django 模型创建工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21598604/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com