2017-12-19 14 views
0

user_profile/model.pyのユニットテストを実行するとエラーが発生します:"1"を割り当てることはできません: "User.group"は "Brand"インスタンスでなければなりません。ユニットテスト用のDjangoファクトリ: "Can not assign" "1 '": "User.group"は "Brand"インスタンスでなければなりません。

私はUserFactory()のインスタンスを作成していたときに私のユニットテスト(factories.py)のための私の工場で、私が正しくグループを割り当てていないよ、ので、このエラーがあると信じています。私の事グループブランドクラス/工場にマップする必要がありますが、私はこれを行う方法がわからないんだけど...

これは私のuser_profile/model.pyです:

class Brand(models.Model): 

    name = models.CharField(max_length=20) 

    def __unicode__(self): 
     return self.name 


class User(AbstractBaseUser, PermissionsMixin): 

    username = models.CharField(
     'username', 
     max_length=50, 
     unique=True, 
     db_index=True 
    ) 
    email = models.EmailField('email address', unique=True) 
    group = models.ForeignKey(Brand, null=True, blank=True) 
    is_active = models.BooleanField(default=True) 
    is_admin = models.BooleanField(default=False) 
    is_staff = models.BooleanField(default=False) 
    is_approved = models.BooleanField(default=True) 

と私のuser_profile/test/factories.pyで:

from user_profile.models import User, Brand 

class UserFactory(factory.django.DjangoModelFactory): 

    class Meta: 

     model = User 
     django_get_or_create = (
      'username', 
      'email', 
      'password', 
      'is_approved', 
      'is_active', 
      'is_staff', 
      'is_admin', 
      'group' 
     ) 


class BrandFactory(factory.django.DjangoModelFactory): 

    class Meta: 

     model = Brand 
     django_get_or_create = ('name',) 

BrandFactory(name='BRAND1') 
BrandFactory(name='BRAND2') 
BrandFactory(name='BRAND3') 
BrandFactory(name='BRAND4') 


UserFactory(
    username='[email protected]', 
    email='[email protected]', 
    password=12345, 
    is_approved=True, 
    is_active=True, 
    is_staff=True, 
    is_admin=True, 
    group="1" <--- HOW DO I MAP THIS TO THE 'BRAND1' FACTORY/CLASS?! 
) 

UserFactory(
    username='[email protected]', 
    email='[email protected]', 
    password=12345, 
    is_approved=True, 
    is_active=True, 
    is_staff=True, 
    is_admin=True, 
    group="2" <--- HOW DO I MAP THIS TO THE 'BRAND2' FACTORY/CLASS?! 
) 

答えて

2

返品値に何かを割り当てる必要があります。例えば

b1 = BrandFactory(name='BRAND1') 
b2 = BrandFactory(name='BRAND2') 

、その後、あなたはあなたのコンストラクタでモデルインスタンスへの参照を使用し

UserFactory(
    username='[email protected]', 
    email='[email protected]', 
    password=12345, 
    is_approved=True, 
    is_active=True, 
    is_staff=True, 
    is_admin=True, 
    group=b1 
) 

UserFactory(
    username='[email protected]', 
    email='[email protected]', 
    password=12345, 
    is_approved=True, 
    is_active=True, 
    is_staff=True, 
    is_admin=True, 
    group=b2 
) 
関連する問題