2017-12-05 16 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 

나는 다음과 같은 오류를 얻을 파이썬 콘솔에서 실행 :

당신은 코드

lambda a: .... 

에 인수 a와 함수를 생성

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

하지만이 프로그램을 보인다는 인수없이 기능을 기대를

lambda: ... 
+0

이 예제 튜토리얼의 코드와 다른 점은 무엇입니까? 나는 아직도 내가 어디로 잘못 가고 있는지 확실하지 않다. https://i.imgur.com/HDqwUKZ.png – Efie

+0

해결 : LazyFunction은 date_joined에 LazyAttribute가 있어야합니다. – Efie