是的,你必须捕捉到 User 模型的 post_save 的信号,如果.is_superuser
改变了,你也改变了.is_primary_user
.
Brian Neal 是否指出,您不应该在应用程序中使用 .is_superuser 标志。它旨在与 Django 权限系统(超级用户拥有所有权限)和/或 Django 管理员一起使用。
编辑:我没有测试,但它应该是这样的:
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)