2017-11-22 10 views
0

의 동작을 제어하는 ​​명명 된 매개 변수 (모델 특성이 아님)를 정의하는 방법이 있습니까? 어쩌면?Django + Factory Boy : factory의 동작을 제어하는 ​​명명 된 매개 변수를 사용하는 방법. + factory.RelatedFactory

예를 들어 : 나는 어쩌면 조건을 통해 RelatedFactory의 생성을 제어하는 ​​명명 된 매개 변수를 만들려면, 내가이 일을 시도 :

# factories.py 
class Purchase(factory.DjangoModelFactory): 
    user = factory.SubFactory('project.factories.UserFactory') 
    total = uniform(10, 100) 

    class Meta: 
     model = Purchase 

class UserFactory(factory.DjangoModelFactory): 
    first_name = factory.Faker('first_name') 
    last_name = factory.Faker('last_name') 

    has_purchase = False 
    purchases = factory.Maybe(
     'has_purchase', 
     yes_declaration=factory.RelatedFactory(Purchase, 'purchase'), 
     no_declaration=None 
    ) 

    class Meta: 
     exclude = ['has_purchase', 'purchases'] 
     model = User 

# tests.py 
user_without_purchase = UserFactory.create() 
user_with_purchase = UserFactory.create(has_purchase=True) 

그것은 보인다 그럴 수 없어 이름이 지정된 매개 변수를 통해 has_purchase의 값을 변경하면 항상 False로 설정됩니다. 두 필드가 모두 에 선언되어 있기 때문에 그럴 지 모르겠다. 메타 속성. 그리고 나는 그들을 에 넣어야합니다 또는 그렇지 않으면 DjangoModelFactory은 무결성 오류를 일으키는 데이터베이스에 저장할 때이 필드를 사용하려고합니다.

할 방법이 있습니까?

답변

0

그 공장 소년 exclude 속성 논문 필드를 추가 할 필요없이 제공 추가 매개 변수에 대한 기능이 보인다 : http://factoryboy.readthedocs.io/en/latest/reference.html#simple-parameters :

class UserFactory(factory.DjangoModelFactory): 
    class Params: 
     has_purchase = False 

어쩌면 http://factoryboy.readthedocs.io/en/latest/reference.html#lazyattribute와 함께 사용?

+0

감사합니다.하지만 "제외"를 제거하고 Params 클래스로 두 필드를 이동하면 "어쩌면"has_purchase 매개 변수를 읽을 수 없습니다 (이유를 모르겠습니다). – user2937998

+0

' 'purchases' 속성을 옮겨야한다고 생각하지 않습니다. 왜냐하면 당신이 말한 것처럼,'Params' 안에'has_purchase'는 읽히지 않을 것입니다. (결국 당신은 여전히 ​​제외가 필요할 것입니다.) 'lazyAttribute'로 시도 했습니까? –

+0

그렇습니다.하지만 LazyAttribute 장고 관리자와도 다음 오류가 발생합니다 : " 'purchases'는이 함수에 대한 잘못된 키워드 인수입니다. – user2937998