2017-06-21 1 views
0

factoryboyを使用してプロジェクトでDjangoモデルのテストデータを作成しようとしています。 1つのフィールド、すなわちManyToManyFieldを除いて、データはFakerによって生成されています。他の組み込みモデルとの多対多の関係は、django.contrib.auth.modelという名前のグループです。ManyToManyFieldに対してダミーデータを設定できません

class Voucher(models.Model): 
    code = models.CharField(max_length=20, null=True, blank=True, unique=True) 
    is_enabled = models.BooleanField('enable voucher', default=True, help_text='A soft delete mechanism for the voucher.') 
    start_date = models.DateTimeField(null=True, blank=True) 
    end_date = models.DateTimeField(null=True, blank=True) 
    member_roles = models.ManyToManyField(to=Group, related_name='member_roles') 

    def __str__(self): 
     return "{}".format(self.code) 

    class Meta: 
     verbose_name = 'Voucher' 
     verbose_name_plural = 'Vouchers' 

これは私のモデルであり、これは私がダミーデータを生成するために作成した工場です:

class VoucherFactory(django.DjangoModelFactory): 
    class Meta: 
     model = 'app.Voucher' 

    code = Faker('first_name') 
    is_enabled = fuzzy.FuzzyChoice([True, False]) 
    start_date = fuzzy.FuzzyDateTime(datetime.datetime.now(pytz.utc)) 
    end_date = fuzzy.FuzzyDateTime(datetime.datetime.now(pytz.utc)) 

    @factory.post_generation 
    def member_roles(self, create, extracted, **kwargs): 
     if not create: 
      return 
     if extracted: 
      for member_role in extracted: 
       self.member_roles.add(member_role) 

データはVoucherモデルの多くの関係に多くの本に対して作成voucher_member_rolesテーブルを除いて、正常満たされます。私はこのテーブルにもデータが入るようにしたい。

私には何が欠けていますか?

答えて

1

バウチャー工場を作る際にmember_rolesを渡す必要があります。たとえば:

VoucherFactory.create(member_roles=[member_role1, member_role2]) 

が、それは述べてhttp://factoryboy.readthedocs.io/en/latest/recipes.html#simple-many-to-many-relationship参照:

をUserFactoryを呼び出すとき()またはUserFactory.buildを()、結合まったくグループが作成されません。 しかし、UserFactory.create(groups =(group1、group2、group3))が呼び出されると、グループ宣言は、グループに渡されたユーザーのグループセットに追加されます。

関連する問題