我正在尝试自定义createsuperuser
命令。
这样做的目的是:
我有一个名为administrator
的表,它与auth_user
表有OneToOne关系
class Administrator(models.Model):
user = models.OneToOneField(get_user_model(), on_delete=models.CASCADE, related_name="admin")
每当我使用命令createsuperuser
创建新的超级用户时,我也想在表administrator
中创建一条记录。
但是我还不知道该怎么做。请帮忙,谢谢。
这是我的repo:
https://github.com/congson95dev/regov-pop-quiz-backend-s-v1/blob/main/auth_custom/management/commands/createsuperuser.py
您想要实现的事情可以通过信号轻松完成。信号是非常有用的,当数据库中有任何变化或者在django模型中创建对象时,它们会被触发。
在你的应用程序(任何你想要的应用程序,你有你的管理表)创建信号。
signals.py
from django.dispatch import receiver
from django.db.models.signals import post_save
from django.contrib.auth.models import User
# from yourapp.models import Administrator
@receiver(post_save , sender = User)
def saveAdminUserForSuperUser(sender , instance , created , **kwargs):
# instance is the object of the User model which has just been created and it fired this signal .
if created and instance.is_superuser :
admin = Administrator.objects.create(user = instance)
admin.save()
# This will create an object in admin table for the super user .
之后,你需要注册你的信号,这是在app
的apps.py中完成的。创建signals.py文件的app.py
from django.apps import AppConfig
class YourAppConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'yourapp'
def ready(self):
import yourapp.signals
你不需要编写类和所有,你只需要在类中创建一个名为ready的新函数,并导入你在应用中创建的文件signals.py。
确保你添加了ready函数,并从你的signals.py所在的应用程序中导入了signals.py。