类型错误:<lambda>()缺少一个必需的位置参数:

5
我正在尝试使用factory_boy和faker为我的Django项目填充一些随机数据。但是,当我尝试创建UserFactory对象的实例时,我遇到了TypeError错误:()缺少1个必需的位置参数:'a'。
这似乎与fake_date和date_joined属性及其lambda函数有关。我找到的一些教程已经介绍了如何在Factory对象中使用lambda函数,但对我来说并没有起作用。请帮我检查一下代码。
import datetime
import factory
import faker
from dataStoreApp.models import Category, Goal, Transaction
from django.contrib.auth.models import User

fake = faker.Faker()


class CategoryFactory(factory.django.DjangoModelFactory):

    class Meta:
        model = Category

    name = factory.Iterator(['Category1', 'Category2',
                             'Category3', 'Category4',
                             'Category5', ], cycle=False)


class UserFactory(factory.django.DjangoModelFactory):
    FACTORY_HIDDEN_ARGS = ('fake_date', )

    class Meta:
        model = User

    fake_date = factory.LazyAttribute(
    lambda a: datetime.datetime.now().strftime("%Y-%m-%d %H:%M"))
    date_joined = factory.LazyFunction(lambda a: a.fake_date)
    first_name = factory.LazyAttribute(lambda b: fake.first_name())
    last_name = factory.LazyAttribute(lambda c: fake.last_name())
    email = factory.LazyAttribute(lambda e: 'test' + '@test_email.com')



class GoalFactory(factory.DjangoModelFactory):
    class Meta:
        model = Goal


class TransactionFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = Transaction

在Python控制台中运行时,我遇到了以下错误:

Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "C:\Program Files\Python36\lib\site-packages\factory\base.py", line 568, in create
    return cls._generate(enums.CREATE_STRATEGY, kwargs)
  File "C:\Program Files\Python36\lib\site-packages\factory\base.py", line 505, in _generate
    return step.build()
  File "C:\Program Files\Python36\lib\site-packages\factory\builder.py", line 272, in build
    step.resolve(pre)
  File "C:\Program Files\Python36\lib\site-packages\factory\builder.py", line 221, in resolve
    self.attributes[field_name] = getattr(self.stub, field_name)
  File "C:\Program Files\Python36\lib\site-packages\factory\builder.py", line 363, in __getattr__
    extra=declaration.context,
  File "C:\Program Files\Python36\lib\site-packages\factory\declarations.py", line 59, in evaluate
    return self.function()
TypeError: <lambda>() missing 1 required positional argument: 'a'

1
请注意,FACTORY_方法已在2.5中被删除。(http://factoryboy.readthedocs.io/en/latest/changelog.html#upgrading) - Alasdair
1个回答

18

您可以在代码中创建具有参数a的函数。

lambda a: ....

但似乎程序期望没有参数的函数

lambda: ...

这有什么不同于例子教程中的代码?我仍然不确定我的错误在哪里。https://i.imgur.com/HDqwUKZ.png - Efie
已解决:date_joined中的LazyFunction应该为LazyAttribute - Efie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接