2015-02-06 5 views
2

저는 장고를 처음 사용합니다. 을 사용하여 Usergroups 필드를 설정하려고합니다. 기본 User 클래스의 필드는 _groups입니다. 나는 그것을 세우려고했지만 도움이 안된다. Group 이후factory_boy를 사용하여 사용자 그룹을 설정하는 방법

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 

답변

0

은 (a ForeignKey 필드에만 적합) UserManyToManyField 관계가 SubFactory를 사용할 수 갖는다하십시오 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), 
     ]) 
+1

Xelnor : 나는 Users' 모델'에 명시 적으로'groups' 필드를 정의하지 않았습니다. ''groups '는이 함수의 무효 키워드 인수입니다. '. 나는 아주 오래 동안 이것에 갇혀 있었다. – Shubham

4

아래 코드는 표준 장고 그룹을 사용합니다. 공장 보이 포스트 생성을 사용하여 사용자에게 그룹을 추가해야합니다.

공장

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 = "[email protected]" 
    password = make_password(user_password) 
    email = "[email protected]" 
    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)