2014-08-28 30 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

而不是post_save的UserProfile你应该注册用户。 – Rohan 2014-08-28 04:34:35

+2

不是它有什么不同,但你为什么覆盖发件人? – karthikr 2014-08-28 04:36:56

回答

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

另一种选择是使用post_save信号

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) 

只有麻烦你将有是,如果你使用一个固定......(因此DoesNotExists ..)

+0

我更喜欢使用'post_save'信号,但在将用户添加到组之前,我需要能够检查此布尔字段是否标记为true。我的'UserProfile'模型与'User'有一个'OneToOneField'关系,并且在保存一个新的'User'时创建,因此我认为'sender'应该是'UserProfile'。显然,我错了,这很好,但我仍然需要在将“用户”添加到组之前执行检查。 – austin15140 2014-08-28 13:19:32

相关问题