在Django中创建时将用户添加到组中

7 投票
2 回答
5618 浏览
提问于 2025-04-18 18:48

我想在创建用户时,只有当这个用户的某个字段被设置为'True'时,才把这个用户添加到一个组里。每个创建的用户都会有一个与之关联的'用户资料'。这样实现是否正确呢?

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)

提前谢谢你!

2 个回答

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
5

另一个选择是使用 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 的情况...)

撰写回答