2016-12-05 13 views
0

私はいくつかのモデル(djangoではなく)をテストするためにfactory boyを使用していますが、別のファクトリの複数インスタンスでリストを含むフィールドを表示するにはどうすればいいですか? clases ユーザーグループ持つたとえば:factory_boyでインスタンスのリストを持つフィールドを作成する方法

class User: 
    name = StringType(required=True) 

class Group: 
    name = StringType(required=True) 
    user = ModelType(User) 

を私はフィールドを表示したいと思い、このようなユーザーが属するすべてのグループが含まれていユーザー工場内グループと呼ばれます。デフォルトで2つのグループを表示する['グループ1'、 'グループ2']。

class UserFactory: 
    name = factory.Faker('first_name') 
    groups = factory.RelatedFactory(GroupFactory, 'user') 

    class Meta: 
     model = User 


class GroupFactory: 
    name = factory.Faker('word') 
    user = factory.SubFactory(UserFactory) 

    class Meta: 
     model = Group 

上記のような関連するファクトリを使用しようとしましたが、関連フィールドのデフォルト値を定義する方法がわかりません。この問題に若干の光を当てることができるファクトリーボーイの指導者はいますか?

答えて

0

これは、工場出荷時の少年のドキュメントの一般的なレシピの一部に記載されている:http://factoryboy.readthedocs.io/en/latest/recipes.html#simple-many-to-many-relationship

あなたは文書でのようなあなたのUserFactoryを作成した場合UserFactoryを使用した場合、その後、あなたがグループを提供することができます:

class UserFactory(factory.django.DjangoModelFactory): 
    class Meta: 
     model = models.User 

    name = "John Doe" 

    @factory.post_generation 
    def groups(self, create, extracted, **kwargs): 
     if not create: 
      # Simple build, do nothing. 
      return 

     if extracted: 
      # A list of groups were passed in, use them 
      for group in extracted: 
       self.groups.add(group) 

group1 = GroupFactory() 
UserFactory.create(groups=[group1,]) 

工場で作成されたすべてのユーザーにデフォルトグループを提供する場合は、あなたがいる場合にelse節を追加することができますアン:ドキュメント内

@factory.post_generation 
def groups(self, create, extracted, **kwargs): 
    if not create: 
     # Simple build, do nothing. 
     return 

    if extracted: 
     # A list of groups were passed in, use them 
     for group in extracted: 
      self.groups.add(group) 
    else: 
     self.groups.add(GroupFactory(name='default group 1')) 

例が使用しているジャンゴので、私は、同様の答えでそれを使用しました。

関連する問題