【问题标题】:Django model doesn't show on admin panel when created through Celery通过 Celery 创建时,Django 模型不会显示在管理面板上
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2023-02-04
    • 2018-11-13
    • 1970-01-01
    • 2021-08-01
    • 1970-01-01
    • 2015-10-25
    • 1970-01-01
    • 2013-03-07
    • 2019-04-27
    相关资源
    最近更新 更多