gpt4 book ai didi

factory-boy - 有没有办法让 FactoryBoy 将参数传递给我的 Django 模型的 save() 方法?

转载 作者:行者123 更新时间:2023-12-02 16:51:57 24 4
gpt4 key购买 nike

我有一个像这样的 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() 方法呢?

最佳答案

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

关于factory-boy - 有没有办法让 FactoryBoy 将参数传递给我的 Django 模型的 save() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58296176/

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