【问题标题】:Using signal to create group with username使用信号创建用户名组
【发布时间】:2019-12-04 13:42:55
【问题描述】:

我正在尝试使用 signals.py 为每个新用户创建一个组

Signals.py 看起来像这样:

@receiver(post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
if created:
    Profile.objects.create(user=instance)
    Profile.objects.create(group=)

还有我的 models.py

class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
group = models.OneToOneField(Group, null=True, blank=True, on_delete=models.CASCADE)
manager = models.BooleanField(default=False)
first_visit = models.BooleanField(default=True)

如何使用用户名设置默认组? “[user] 的 Groupe” 的东西?

【问题讨论】:

    标签: python django-models django-signals


    【解决方案1】:

    您可以先构造(或检索)一个名称为用户名的组,然后在您创建的配置文件中设置该组:

    @receiver(post_save, sender=User)
    def create_profile(sender, instance, created, **kwargs):
    if created:
        group, __ = Group.objects.get_or_create(name='Group of {}'.format(instance.username))
        Profile.objects.create(user=instance, group=group)
        instance.groups.add(group)

    但是,您可能希望使用.create(..) 而不是get_or_create(..) 来防止用户注册为'admin',例如,自动注册到(可能)已经存在的组Group of admin

    【讨论】:

    • 嗯,我虽然更容易.. 我可以使用信号将默认情况下创建的组设置为用户吗?该组已创建,但我没有将其设置给用户,所以我有错误
    • @Mcflan_7:是的,您可以将组添加到instance.groups
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-13
    • 2013-06-29
    • 1970-01-01
    • 2020-08-18
    • 1970-01-01
    相关资源
    最近更新 更多