/ / factory_boyを使用してユーザーグループを設定するにはどうすればよいですか - django、django-testing、factory-boy

factory_boyを使用してユーザーグループを設定するにはどうすればよいですか - django、django-testing、factory-boy

私はかなり新しいDjangoです。私は groups フィールド User を使用して factory_boy。デフォルト User クラスにはフィールドがあります _groups。私はそれを設定しようとしましたが、それは助けにはなりません。

class GroupFactory(factory.django.DjangoModelFactory):
class Meta:
model = Group

name = Sequence(lambda n: "group_{0}".format(n))


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

username = factory.Sequence(lambda n: "user_{0}".format(n))
password = "test"
first_name = u"ßhamra"
last_name = u"ßhamra"
_groups = factory.SubFactory(GroupFactory)


@classmethod
def _create(cls, model_class, *args, **kwargs):
"""
Override the default ``_create`` with our custom call.
Due to internal behavior or create user create method that                forces is_staff kwarg


"""
g = GroupFactory("abc")
manager = cls._get_manager(model_class)
is_staff = kwargs.pop("is_staff", None)
user = manager.create_user(*args, **kwargs)


if is_staff:
user.is_staff = is_staff
user.save()
return user

回答:

回答№1は6

以下のコードは標準のdjangoグループを利用しています。ユーザーにグループを追加するには、工場の少年ポスト世代を使用する必要があります。

工場

import factory
import django.contrib.auth.models as auth_models
from django.contrib.auth.hashers import make_password

user_password = "password"

class SubscribedGroupFactory(factory.django.DjangoModelFactory):
class Meta:
model = auth_models.Group

name = "subscribed"

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

first_name = "Sophia"
last_name = "Ball"
username = "clowngirl@heaven.com"
password = make_password(user_password)
email = "clowngirl@heaven.com"
is_active = True

@factory.post_generation
def groups(self, create, extracted, **kwargs):
if not create:
return

if extracted:
for group in extracted:
self.groups.add(group)

テスト

from app.factories import UserFactory, SubscribedGroupFactory, user_password
class TestCenterTest(TestCase):

def test_test_center_redirect(self):
user = UserFactory.create(groups=(SubscribedGroupFactory.create(),))
self.client.login(username=user.email, password=user_password)
response = self.client.get("/test-center/")
self.assertEqual(302, response.status_code)

回答№2の場合は0

以来 Group があります ManyToManyField との関係 User、あなたは使用することはできません SubFactory (これは ForeignKey フィールド):with a SubFactory, factory_boy 最初に Group それを渡す UserFactory それは User.objects.create(_groups=Group)。これは仕事に勝った。

を見てみましょう Recipes ドキュメントのセクション: http://factoryboy.readthedocs.org/en/latest/recipes.html#simple-manytomany

ここでは、次のコードが有効です。

  class UserFactory(factory.django.DjangoModelFactory):
# All other declarations here

groups = factory.List([
factory.RelatedFactory(GroupFactory),
])