通过 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 函数中再次创建模型。
我正在通过 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 函数中再次创建模型。