我有一个像这样的Django模型:
class NicePerson(models.Model):
last_name = models.CharField(max_length=100)
def save(self, make_irish=False, *args, **kwargs):
"""if make_irish is True, prepend last_name with O'"
if make_irish:
self.last_name = "O'" + self.last_name
super(MyModel, self).save(*args, **kwargs)
我有一个FactoryBoy类来构建NicePerson实例
class NicePersonFactory(factory.django.DjangoModelFactory):
class Meta:
model = NicePerson
我知道我可以像这样一起使用这些
nice_person = NicePersonFactory(last_name='Shea')
但是如何将“ make_irish”参数传递给我的save()
方法?
答案 0 :(得分:0)
factory_boy使用默认的管理器进行创建,即调用NicePerson.objects.create()
或NicePerson.objects.get_or_create()
。
对于您的示例,您可以覆盖那些管理器(在模型定义中):
class NicePersonManager(models.Manager):
def create(self, *args, **kwargs):
if kwargs.pop('make_irish', False):
kwargs.update(...)
return super().create(*args, **kwargs)
另一种选择是覆盖工厂的_create
和_get_or_create
方法。例如:
class NicePersonFactory(factory.django.DjangoModelFactory):
@classmethod
def _create(cls, model_class, *args, **kwargs):
make_irish = kwargs.pop('make_irish', False)
instance = model_class(**kwargs)
instance.save(make_irish=make_irish)
return instance