首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django .is_superuser字段权限

Django .is_superuser字段权限
EN

Stack Overflow用户
提问于 2013-07-18 21:04:36
回答 2查看 6.9K关注 0票数 0

默认情况下,通过运行manage.py createsuperuser命令,我可以从项目目录创建超级用户,但.is_superuser标志是区分超级用户或其他用户的默认django标志。

我不想使用它,因为我在整个应用程序中使用该标志来显示设置菜单。相反,我在我的userprofile models中添加了一个字段,该字段为.is_primary_user

有没有办法控制它,这样如果我运行createsuperuser comment,它应该在userprofile模型中用"1“更新.is_primary_user字段?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-18 21:26:09

是的,你必须捕捉用户模型的post_save的信号,如果.is_superuser改变了,你也改变了.is_primary_user

Brian Neal指出,您不应该在应用程序中使用.is_superuser标志。它旨在与Django权限系统(超级用户拥有所有权限)和/或Django admin一起使用。

编辑:我还没有测试,但应该是这样的:

代码语言:javascript
复制
from django.db.models.signals import pre_save
from django.contrib.auth import User

# method for updating
def update_primary_user(sender, instance, **kwargs):
     if instance.pk:
          return
     if instance.is_superuser and not instance.userprofile.is_primary_user:
          instance.userprofile.is_primary_user = True
          instance.userprofile.save()

# register the signal
pre_save.connect(update_primary_user, sender=User)
票数 5
EN

Stack Overflow用户

发布于 2013-07-18 21:26:44

在我看来,有两种选择。一个是关于配置文件和用户的post保存信号。另一种方法是覆盖配置文件保存方法。后者将只处理新用户。

用户模型或配置文件模型的post save signal可用于更新配置文件模型is_primary_user。这样,当您运行createsuperuser程序时,不仅可以相应地更新配置文件,而且如果您授予现有用户超级用户权限,它还会更新该用户的配置文件。使用用户模型信号的问题是可能还没有创建配置文件。您可能需要捕获这两个模型的信号。一个用于用户是否已更新(用户模型),另一个(配置文件模型)用于用户是否正在创建。

另一个选项是覆盖配置文件保存方法。您可以检查它所链接的user.is_superuser,然后相应地更新is_primary_user字段。

另一方面,您可能只想对创建的第一个超级用户执行此操作,在这种情况下,您首先需要检查以前是否存在任何超级用户。

我同意另外两个帖子的观点,即最好不要以这种方式使用is_superuser标志。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17724281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档