2014-08-28 4 views
2

Я ищу, чтобы добавить пользователя в группу, только если поле этого пользователя указано как «Истина» после создания Пользователя. Каждый созданный пользователь имеет связанный с ним «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

+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

Другой вариант использует 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 имеет отношение «OneToOneField» к «Пользователь» и создается, когда сохраняется новый «Пользователь», поэтому я подумал, что «отправитель» должен быть «UserProfile». По-видимому, я ошибаюсь в этом, и все в порядке, но мне все равно нужно выполнить проверку перед добавлением «Пользователь» в группу. – austin15140

Смежные вопросы