Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Adding user to group on creation in Django

I'm looking to add a User to a group only if a field of this User is specified as 'True' once the User is created. Every User that is created would have a 'UserProfile' associated with it. Would this be the correct way to implement such a thing?

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)

Thanks in advance!

like image 589
austin15140 Avatar asked Aug 28 '14 03:08

austin15140


1 Answers

Another option is using a post_save signal

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)

Only trouble you will have is if you use a fixture ... (hence the DoesNotExists .. )

like image 196
haki Avatar answered Oct 16 '22 17:10

haki