默认情况下,通过运行manage.py createsuperuser命令,我可以从项目目录创建超级用户,但.is_superuser标志是区分超级用户或其他用户的默认django标志。
我不想使用它,因为我在整个应用程序中使用该标志来显示设置菜单。相反,我在我的userprofile models中添加了一个字段,该字段为.is_primary_user。
有没有办法控制它,这样如果我运行createsuperuser comment,它应该在userprofile模型中用"1“更新.is_primary_user字段?
发布于 2013-07-18 21:26:09
是的,你必须捕捉用户模型的post_save的信号,如果.is_superuser改变了,你也改变了.is_primary_user。
Brian Neal指出,您不应该在应用程序中使用.is_superuser标志。它旨在与Django权限系统(超级用户拥有所有权限)和/或Django admin一起使用。
编辑:我还没有测试,但应该是这样的:
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)发布于 2013-07-18 21:26:44
在我看来,有两种选择。一个是关于配置文件和用户的post保存信号。另一种方法是覆盖配置文件保存方法。后者将只处理新用户。
用户模型或配置文件模型的post save signal可用于更新配置文件模型is_primary_user。这样,当您运行createsuperuser程序时,不仅可以相应地更新配置文件,而且如果您授予现有用户超级用户权限,它还会更新该用户的配置文件。使用用户模型信号的问题是可能还没有创建配置文件。您可能需要捕获这两个模型的信号。一个用于用户是否已更新(用户模型),另一个(配置文件模型)用于用户是否正在创建。
另一个选项是覆盖配置文件保存方法。您可以检查它所链接的user.is_superuser,然后相应地更新is_primary_user字段。
另一方面,您可能只想对创建的第一个超级用户执行此操作,在这种情况下,您首先需要检查以前是否存在任何超级用户。
我同意另外两个帖子的观点,即最好不要以这种方式使用is_superuser标志。
https://stackoverflow.com/questions/17724281
复制相似问题