我有一个django模型,在保存时会触发在外部服务上创建帐户(与django无关)。但是,为了进行测试,我想禁止创建此帐户。我可以覆盖管理器的save()方法并从那里弹出kwarg,或者我可以按照Non-database field in Django model向模型添加非数据库字段属性,并在我的save方法中检查它。
然而,当我尝试使用factoryboy来创建我的对象时,它似乎检查模型中的真实字段,由于该属性不是字段而崩溃。
class MyModel(models.Model):
name = models.CharField()
create_external_account = True
def save(self, *args, **kwargs):
if create_external_account:
...
class MyModelFactory(factory.django.DjangoModelFactory):
class Meta:
model = MyModel
name = factory.Sequence(lambda n: 'name%d' % n)
create_external_account = False
关于如何通过factoryboy传递额外参数的任何想法?
答案 0 :(得分:1)
如果在信号处理程序中创建了外部帐户,您还可以disable signals。
答案 1 :(得分:1)
factory_boy
' create()
调用您的模型的MyModel.objects.create(**kwargs)
方法。
当你写MyModelFactory()
时,会调用:
obj = MyModel(name="name01", create_external_account=False)
obj.save()
return obj
在这里,您应该覆盖模型的__init__
方法来处理自定义字段:
class MyModel(django.db.models.Model):
def __init__(self, *args, **kwargs):
self.create_external_account = kwargs.pop('create_external_account', False)
return super(MyModel, self).__init__(*args, **kwargs)
答案 2 :(得分:0)