以下是我在放置在定义了auth模型的包中的signals.py文件中的代码。
@receiver(post_migrate, sender=settings.AUTH_USER_MODEL)
def define_groups(sender, **kwargs):
# Create groups
Group.objects.get_or_create(name='Promoter')
Group.objects.get_or_create(name='Client')
Group.objects.get_or_create(name='Superuser')
Group.objects.get_or_create(name='Staff')
文档(https://docs.djangoproject.com/en/1.8/topics/auth/customizing/#referencing-the-user-model)声明应将其设置为
sender=settings.AUTH_USER_MODEL
虽然这仅适用于文档示例中提到的post_save。
我已经尝试 get_user_model(),也直接使用 my_custom_user.models 。
get_user_model()会返回错误,而将模型设置为发件人的工作正常,因为 -
from . import models
@receiver(post_syncdb, sender=models)
def define_groups(sender, **kwargs):
# Create groups
Group.objects.get_or_create(name='Promoter')
Group.objects.get_or_create(name='Client')
Group.objects.get_or_create(name='Superuser')
Group.objects.get_or_create(name='Staff')
但根据文档,这不是引用自定义用户模型的正确方法,只是一个丑陋的解决方法。
是否有人能够帮助我解决方案,以便我可以在第一次迁移用户模型时添加这些组。
谢谢
编辑:使用get_user_model()返回以下错误 -
django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet.
答案 0 :(得分:7)
post_migrate
方法的sender
永远不是模型(自定义或其他方式),它是已安装的应用的AppConfig
实例。
文档提供了以下示例,用于在ready
方法中连接信号处理程序。
from django.apps import AppConfig
from django.db.models.signals import post_migrate
def my_callback(sender, **kwargs):
# Your specific logic here
pass
class MyAppConfig(AppConfig):
...
def ready(self):
post_migrate.connect(my_callback, sender=self)
同样,post_sync_db
信号的发送者(注意信号已被弃用)是包含已安装模型的模块。