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

标签 python django django-models django-signals django-1.8

以下是我在定义身份验证模型的包中的 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.

最佳答案

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)

同样,post_sync_db 信号(注意该信号已弃用)的发送方是包含已安装模型的模块。

关于python - 在 django 1.8 中,如何在设置自定义用户模型时为 post_migrate 和 post_syncdb 信号接收器设置发送方?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31952425/

相关文章:

python - 在 Python/Numba 中访问数组会产生奇怪的结果

python - Django Flatpages 模板标签不适用于模板继承

python - 有什么方法可以在 Django 管理站点中添加选项卡式表单?

Django ManyToMany 模型验证

Django - 使用外键关系同时保存两条记录

python - seq2seq 预测下一个时间步

Python 相当于 R 数据框

python - 根据数据框中的部分索引名称对列值求和

python - 在 python/django 中异步发送邮件的正确方法是什么?

mysql - 具有单个 AWS MySQL RDS 的多个 Django 应用程序 - 需要相同的 Models.py 文件