【发布时间】:2017-07-12 15:59:13
【问题描述】:
我正在通过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')
谁能指出为什么这会导致模型不显示在管理面板上?
【问题讨论】:
-
@hansTheFranz 你建议删除
admin.site.register(model, admin_opts)吗? -
admin.site.register(model, admin_opts)中admin_opts的值是多少? -
@OluwafemiSule 这是一堆管理字段选项,如下所示:
class BaseEmail(admin.ModelAdmin): fields = (...)更改管理页面上显示的字段 -
我认为您想确保
model是models.Model的子类。正如您已经提到的,admin_opts是admin.ModelAdmin的子类。
标签: python django django-celery