没有模型的 Django 管理视图

Phi*_*ard 6 python django celery

抱歉,我还没有代码示例,因为我正在尝试弄清楚我的想法是否可以实现。

我正在编写一个 Django 应用程序来管理 Celery 任务。我用于django-celery-beat计划任务,但我想要一个类似的管理界面来启动临时任务,并使用接受参数的表单。我希望它与 IP 一起位于管理部分,因为这就是应用程序所做的全部工作;目前没有其他意见。

所有文档都ModelAdmin基于模型的自定义字段,但我认为该对象不需要存储在模型中,因为它们是瞬态的,并且数据将由 Celery 任务保存。据我从文档中了解到,您无法在不尝试模型的情况下注册自定义管理视图。

我正在寻找的是一个不与模型绑定的自定义视图,这样我就可以在管理部分为这些管理命令创建自定义表单。

我曾经有过的想法:

  • managed = False创建一个虚拟模型Meta
  • 创建一个真实的模型,但永远不要在自定义中访问它ModelForm
  • 只需创建一个视图并将 URL 手动添加到管理部分即可。这可能是最简单的方法,但我一直在避免,因为我不确定需要什么将其绑定到管理员的身份验证系统,或者当其他所有内容自动生成时在管理页面中显示链接。

任何指示表示赞赏。我将测试所有合理的答案并选择最好的作为正确答案,但会对所有回复投票。

编辑:@dejavu_cmd_delt 提出了Flower的很好建议,但如果可能的话,我想将其全部集成到该admin部分中。

Phi*_*ard 1

django_celery_beat我放弃了:)这似乎是一种反模式,所以我放弃了这个想法,并基于临时任务的模型创建了一个简单的自定义模型。这使我能够利用ScheduledTask模型表单的任务检测方法,并使用pre_save钩子将创建任务发送给 Celery。然后,我创建了一个单独的 Django 应用程序来包含它并与 main 一起安装django_celery_beat

这是该模型的副本,以防任何人使用它:

class AdhocTask(models.Model):

    id = models.AutoField(primary_key=True)
    description = models.CharField(blank=True, max_length=255)
    regtask = models.CharField(null=True, max_length=200)
    args = models.TextField(blank=True, default='[]',
                            help_text='JSON encoded positional args'
                            )
    kwargs = models.TextField(blank=True, default='{}',
                            help_text='JSON encoded keyword args'
                            )


# SendAdhocTask is my management command that parses the AdhocTask instance
# and sends the task to a Celery task queue.
signals.pre_save.connect(SendAdhocTask, sender=AdhocTask)
Run Code Online (Sandbox Code Playgroud)