广告区

广告区


本站消息

站长简介/公众号

关注本站官方公众号:程序员总部,领取三大福利!
福利一:python和前端辅导
福利二:进程序员交流微信群,专属于程序员的圈子
福利三:领取全套零基础视频教程(python,java,前端,php)

  价值13000svip视频教程,python大神匠心打造,零基础python开发工程师视频教程全套,基础+进阶+项目实战,包含课件和源码

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

根据分配的 user_group 保存后用户处于非活动状态 - Django Allauth

发布于2022-05-21 12:14     阅读(596)     评论(0)     点赞(16)     收藏(5)



我有两个不同的用户组 group_a 和 group_b。在注册时,用户可以选择他/她所属的组。我正在使用 Django Allauth 来处理所有用户的东西,所以我制作了一个自定义帐户适配器来处理额外的逻辑:

custom_adapter.py

class UserAccountAdapter(DefaultAccountAdapter):
    def save_user(self, request, user, form, commit=True):

        user = super(UserAccountAdapter, self).save_user(request, user, form, commit=False)
        user.voornaam = form.cleaned_data.get('first_name')
        user.achternaam = form.cleaned_data.get('last_name')
        user.user_group = form.cleaned_data.get('user_group')
        user.save()
        user.groups.add(user.user_group)
        user.save()
        if user.groups == 'group_b':
            user.is_active = False
        else:
            user.is_active = True
        user.save()
        return user

在注册时,用户会按预期分配到它选择的组。之后我想将 user.is_active = False 分配给选择 group_b 的人。在上面的示例中,我使用了 3 种保存方法(我认为这在 DRY 原则下非常重要),但我尝试了所有可能的组合。当我打印出 user.groups 时,在上面示例中的每个保存方法之后,它都设置为 None。但是当我查看管理面板时,它仍然会以正确的方式分配。

解决这个问题的最佳方法是什么?

**编辑

我在下面添加了我的用户模型以获得额外的许可:

class User(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(max_length=254, unique=True)
    voornaam = models.CharField(max_length=254, null=True, blank=True)
    achternaam = models.CharField(max_length=254, null=True, blank=True)
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    last_login = models.DateTimeField(null=True, blank=True)
    date_joined = models.DateTimeField(auto_now_add=True)

    USERNAME_FIELD = 'email'
    EMAIL_FIELD = 'email'
    REQUIRED_FIELDS = []

    objects = UserManager()

解决方案


修复!

我缺少用于过滤组名称的过滤器属性,并且缺少 .exists()。

对于任何感兴趣的人,下面的代码都可以解决问题:

class UserAccountAdapter(DefaultAccountAdapter):
    def save_user(self, request, user, form, commit=True):

        user = super(UserAccountAdapter, self).save_user(request, user, form, commit=False)
        user.voornaam = form.cleaned_data.get('first_name')
        user.achternaam = form.cleaned_data.get('last_name')
        user.user_group = form.cleaned_data.get('user_group')
        user.save()
        user.groups.add(user.user_group)
        if user.groups.filter(name='zakelijk').exists():
            user.is_active = False
        else:
            user.is_active = True
        user.save()
        return user






所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/1533945/599a0f259a575d525f22/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

16 0
收藏该文
已收藏

评论内容:(最多支持255个字符)