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

时间:2017-07-12 15:59:13

标签: python django django-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')

有人能指出为什么这会让模型不显示在管理面板上吗?

1 个答案:

答案 0 :(得分:0)

我最终解决这个问题的方法是将我给予芹菜的任务分成2个。第一个任务是动态创建模型,第二个是向这些模型添加对象。我同步创建了动态模型。我立刻调用我的芹菜功能,并在新模型下创建对象是通过芹菜来完成的。

需要注意的一点是,当您创建动态模型类型的对象时,您将收到一条错误消息,指出所述模型不存在。你应该做的是在你的芹菜功能中再次创建模型。