通过 Celery 创建时,Django 模型不会显示在管理面板上

Django model doesn't show on admin panel when created through Celery

我正在通过 celery 过程创建一些动态 Django 模型。当我在不使用 celery 的情况下创建这些模型时,它们会出现在管理面板上,但是当我 运行 通过 celery 进行处理时,这些模型不会出现在管理页面上。我知道模型已创建,因为当我 运行 makemigrations 之后,它确实识别了新创建的模型。我的代码是这样的:

signals.py

@disable_for_loaddata
def email_change(sender, instance, **kwargs):
    from email.tasks import update_email
    update_email.delay(instance.pk)

tasks.py

@shared_task
def update_email(id):
    from email.views import save_email
    save_email(id)

views.py

def save_email(id):
    from email.models import EmailType
    instance = EmailType.objects.get(pk=id)  
    model = type(instance.__str__(), (Email,), attrs)

    admin.site.register(model, admin_opts)
    reload(import_module(settings.ROOT_URLCONF))
    clear_url_caches()

    call_command('makemigrations')
    call_command('migrate')

谁能指出为什么这会使模型不显示在管理面板上?

我最终解决这个问题的方法是将我交给 celery 的任务一分为二。第一个任务是动态创建模型,第二个是向这些模型添加对象。我同步创建了动态模型。我马上调用我的 celery 函数,新模型下的对象的创建是通过 celery 完成的。

需要注意的一点是,当您创建动态模型类型的对象时,您会得到一个错误,指出该模型不存在。你应该做的是在你的 celery 函数中再次创建模型。