2014-02-06 4 views
0

OneToOne 관계가있는 Django 모델의 여러 팩토리를 설정하려고합니다. & 외래 키와 같은 방식으로 작동하지 않는 것 같습니다.OnetoOne 관계로 Django 모델을위한 팩토리 만들기

내 unittest를 실행할 때 주 모델에는 관계가 설정되어 있지 않습니다.

내 모델 :

class ThePlan(models.Model): 
    user = models.ForeignKey("User") 
    creationdate = models.DateField(auto_now_add=True) 


class OldPlan(models.Model): 
    plan = models.OneToOneField("ThePlan") 
    theplan = CharField(max_length = 200,) 


class NewPlan(models.Model): 
    plan = models.OneToOneField("ThePlan") 
    theplan = CharField(max_length = 200,) 

내 공장 :

class ThePlanFactory(factory.DjangoModelFactory): 
    FACTORY_FOR = "mysite.PlanModel" 

    user = factory.SubFactory(UserFactory) 


class OldPlanFactory(factory.DjangoModelFactory): 
    FACTORY_FOR = "mysite.OldModel" 

    plan = factory.RelatedFactory(ThePlanFactory) 
    theplan = '' 


class NewPlanFactory(factory.DjangoModelFactory): 
    FACTORY_FOR = "mysite.NewModel" 

    plan = factory.RelatedFactory(ThePlanFactory) 
    theplan = '' 

그리고 내 테스트에서

setUp() 나는 다음과 같은 일을 해요;

def setUp(self): 
    self.user = factories.UserFactory.create() 

    self.plan = factories.ThePlanFactory.create(
     user=self.user 
    ) 
    self.oldplan = factories.OldPlanFactory.create(
     plan=self.plan 
    ) 
    self.newplan = factories.NewPlanFactory.create(
     plan=self.plan 
    ) 

이렇게 포함 된 테스트를 실행하면 DoesNotExist: ThePlan has no OldPlan이 표시됩니다.

여기서 제가 잘못 되었나요? 문제는 바로 create입니다. 대신 build으로 공장을 설정하고 관계를 설정 한 다음 save을 호출해야합니까?

+0

@danihp 잘 발견! 나는 그것을'main','model1','model2'로 쓰고 있었고, 그것은 지루한 예가되어서 중도를 바꾸어 놓았다는 것을 깨달았습니다! 감사. –

+0

'ThePlanFactory'하지만'OldPlanFactory'에 문제가있는 것 같습니다. setUp의 어느 부분에서 오류가 발생했는지 알려줄 수 있습니까? – danihp

답변

0

제 문제는 시간과 2 개의 종속 공장 생성과 관련이 있습니다.

직접 작성을 호출하는 대신, plan 관계가 설정되면 오브젝트를 설정하고 오브젝트를 저장했습니다. 다음과 같은 작업이 필요합니다.

def setUp(self): 
    self.user = factories.UserFactory.create() 

    self.plan = factories.ThePlanFactory.create(
     user=self.user 
    ) 
    self.oldplan = factories.OldPlanFactory() 
    self.oldplan.plan = self.plan 
    self.oldplan.save() 

    self.newplan = factories.NewPlanFactory() 
    self.newplan.plan = self.plan 
    self.newplan.save()