在django 1.8中,如何设置自定义用户模型时为post_migrate和post_syncdb信号接收器设置发送方?

RA1*_*123 5 python django django-signals django-models django-1.8

以下是我在放置在定义了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')
Run Code Online (Sandbox Code Playgroud)

文档(https://docs.djangoproject.com/en/1.8/topics/auth/customizing/#referencing-the-user-model)声明它应该设置为

sender=settings.AUTH_USER_MODEL
Run Code Online (Sandbox Code Playgroud)

虽然这只适用于文档示例中提到的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')
Run Code Online (Sandbox Code Playgroud)

但根据文档,这不是引用自定义用户模型的正确方法,只是一个丑陋的解决方法.

有人请帮助我解决方案,以便我可以添加这些组与用户模型的第一次迁移.

谢谢

编辑:使用get_user_model()返回以下错误 -

django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet.
Run Code Online (Sandbox Code Playgroud)

Ala*_*air 7

所述sender的post_migrate方法是一个从不模型(自定义或以其它方式),它是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)
Run Code Online (Sandbox Code Playgroud)

类似地,post_sync_db信号发送器(注意信号已弃用)是包含已安装模型的模块.