如何在django中重写createsuperuser命令



我正在尝试自定义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。

相关内容

  • 没有找到相关文章

最新更新