我在force = False的模型中覆盖了Save方法,如何使用factory boy来模拟Django模型?

时间:2015-03-13 23:36:52

标签: django factory-boy

例如,请参阅以下代码:

class Thing(Model):
    def save(force=False, *args, **kwargs):
        if not force:
             raise Exception("don't save!")

FactoryBoy调用model.get_or_create()调用model.save()。有没有办法在FactoryBoy中创建此模型的实例而不修改save或get_or_create方法?

2 个答案:

答案 0 :(得分:2)

如果你想要的只是Django模型的本地实例,你应该使用build strategy。此外,创建策略会调用_create method,可以覆盖该策略以满足您的需求。

答案 1 :(得分:2)

factory.django.DjangoModelFactory的默认行为是调用MyModel.objects.create()

如果目标只针对一次测试中的单个调用,请使用MyModelFactory.build()

如果目标是从不调用create(),请在声明中设置以下内容:

class MyModelFactory(factory.django.DjangoModelFactory):
  class Meta:
    model = models.MyModel
    strategy = factory.BUILD_STRATEGY

这会将MyModelFactory()映射到MyModelFactory.build()而不是DjangoModelFactory默认值MyModelFactory.create()