Django .is_superuser字段权限

use*_*641 0 python django django-models django-admin

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

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

有什么方法可以控制它,以便如果我运行createsuperuser注释,它应该.is_primary_useruserprofile模型中将字段更新为“ 1” ?

Jor*_*tao 5

是的,有,您必须捕获User模型的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)
Run Code Online (Sandbox Code Playgroud)