默认情况下,通过运行manage.py createsuperuser
命令从项目目录中我可以创建超级用户,但.is_superuser
标志是默认的django标志,以区别超级用户或其他用户。
我不想使用它,因为我在整个应用程序中使用该标志来显示设置菜单。相反,我在userprofile models
中添加了一个字段,字段为.is_primary_user
。
有没有办法控制它,所以如果我运行createsuperuser
评论,它应该在.is_primary_user
模型中将userprofile
字段更新为“1”?
答案 0 :(得分:4)
是的,您必须捕获用户模型的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)
答案 1 :(得分:1)
我看到它有两个选项。一个是关于配置文件和用户的帖子保存信号。另一种是覆盖配置文件保存方法。后者只会处理新用户。
用户模型或配置文件模型的post save signal可用于更新配置文件模型is_primary_user。然后,不仅在运行createsuperuser程序时,您可以相应地更新配置文件,但如果您授予现有用户超级用户权限,它还将更新该用户配置文件。使用用户模型信号的问题是可能尚未创建配置文件。您可能需要捕获两种模型的信号。一个用于更新用户(用户模型),另一个用于创建用户(配置文件模型)。
另一个选项是覆盖配置文件保存方法。您可以检查链接到的user.is_superuser,然后相应地更新is_primary_user字段。
另一方面,您可能希望仅为创建的第一个超级用户执行此操作,在这种情况下,您首先需要检查以前是否存在任何超级用户。
我同意另外两张海报,最好不要以这种方式使用is_superuser标志。