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

I have overriden the Save method in a model with force=False, how do I use factoryboy to mock the Django model?

例如,看下面的代码:

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

FactoryBoy 调用 model.get_or_create(),后者调用 model.save()。有没有办法在不修改保存或 get_or_create 方法的情况下在 FactoryBoy 中创建此模型的实例?

如果您只需要一个 Django 模型的本地实例,您应该使用 build strategy. Also, the create strategy invokes _create method,它可以被覆盖以满足您的需要。

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(),而不是默认的 DjangoModelFactoryMyModelFactory.create()