我正在通过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')
有人能指出为什么这会让模型不显示在管理面板上吗?
答案 0 :(得分:0)
我最终解决这个问题的方法是将我给予芹菜的任务分成2个。第一个任务是动态创建模型,第二个是向这些模型添加对象。我同步创建了动态模型。我立刻调用我的芹菜功能,并在新模型下创建对象是通过芹菜来完成的。
需要注意的一点是,当您创建动态模型类型的对象时,您将收到一条错误消息,指出所述模型不存在。你应该做的是在你的芹菜功能中再次创建模型。