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

相關問題