2014-08-28 3 views
2

사용자가 생성되면이 사용자의 필드가 'True'로 지정된 경우에만 그룹에 사용자를 추가하려고합니다. 생성 된 모든 사용자에게는 'UserProfile'이 연결됩니다. 이것이 바로 그러한 것을 구현하는 올바른 방법일까요?Django에서 생성시 그룹에 사용자 추가

models.py : 사전에

def add_group(sender, instance, created, **kwargs): 
    if created: 
     sender = UserProfile 
     if sender.is_in_group: 
      from django.contrib.auth.models import Group 
      g = Group.objects.get(name='Some Group') 
      g.user_set.add(sender) 

post_save.connect(add_group, sender=UserProfile) 

감사합니다!

+0

UserProfile의 post_save 대신 User에 등록해야합니다. – Rohan

+2

차이는 아니지만 왜 발신자를 덮어 쓰고 있습니까? – karthikr

답변

0

이 시도 :

def save(self, *args, **kwargs): 
    # `save` method of your `User` model 

    # if user hasnt ID - is creationg operation 
    created = self.id is None 
    super(YourModel, self).save(*args, **kwargs) 

    # after save user has ID 
    # add user to group only after creating 
    if created: 
     # adding to group here 
0

을 또 다른 옵션을 사용하면 고정 ... 사용하는 경우가있을 것이다

from django.db.models.signals import post_save 
from django.contrib.auth.models import User, Group 

def add_user_to_public_group(sender, instance, created, **kwargs): 
    """Post-create user signal that adds the user to everyone group.""" 

    try: 
     if created: 
      instance.groups.add(Group.objects.get(pk=settings.PUBLIC_GROUP_ID)) 
    except Group.DoesNotExist: 
     pass 

post_save.connect(add_user_to_public_group, sender=User) 

만 문제가있는 post_save 신호를 사용하는 (따라서 DoesNotExists를 ..)

+0

'post_save' 신호를 사용하는 것을 선호하지만 사용자를 그룹에 추가하기 전에이 부울 필드가 true로 표시되어 있는지 확인할 수 있어야합니다. 내'UserProfile' 모델은 'User'와 'OneToOneField' 관계를 가지고 있고 새로운'User'가 저장 될 때 만들어 지므로'sender'는'UserProfile'이어야한다고 생각했습니다. 분명히, 나는 괜찮다.하지만 그룹에 'User'를 추가하기 전에 검사를 수행 할 수 있어야한다. – austin15140

관련 문제