2017-12-05 13 views
0

factory_boyとfakerを使用してDjangoプロジェクトにランダムなデータを設定しようとしています。しかし、UserFactoryオブジェクトのインスタンスを作成しようとすると、TypeError:()エラーが発生しました。1つの必須の位置引数 'a'がありません。TypeError:<lambda>()が見つかりません1必要な位置引数:

これはfake_date属性とdate_joined属性とそのラムダ関数と関係があるようです。私が見つけたチュートリアルのいくつかは、Factoryオブジェクトのためにこの方法でラムダ関数を使用してレイアウトしましたが、それは私のためには機能しません。

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

答えて

2

あなたは、コード内の引数a

lambda a: .... 

を関数を作成しますが、プログラムが引数なしで機能を期待思わ

lambda: ... 
+0

このチュートリアルのコードとどのように違うのですか?私はまだどこが間違っているのか分からない。 https://i.imgur.com/HDqwUKZ.png – Efie

+0

解決済み:LazyFunctionはdate_joinedのLazyAttributeであったはずです – Efie

関連する問題