Django管理员视图没有模型

时间:2016-11-17 07:20:54

标签: python django celery

很抱歉,我还没有代码示例,因为如果我想到的话甚至可以解决的话,我还是想弄清楚。

我正在编写一个Django应用程序来管理Celery任务。我使用django-celery-beat进行预定任务,但我希望使用类似的管理界面启动临时任务,并使用表单接受参数。我喜欢它与IP管理部分坐在一起,因为这是所有的应用程序;现在没有其他意见。

ModelAdmin的所有文档都基于模型的自定义字段,但我不认为此对象需要存储在模型中,因为它们是瞬态的,数据将由Celery任务保存。根据我从文档中理解的内容,您无需注册自定义管理视图而无需尝试使用模型。

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

我有过的想法:

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

任何指针都表示赞赏。我将测试所有合理的答案并选择最佳答案,但会对所有答案进行投票。

编辑:@dejavu_cmd_delt提出了Flower的好建议,但如果可能的话,我希望将其全部整合到admin部分。

1 个答案:

答案 0 :(得分:1)

我放弃了:)这似乎太过反模式了,所以我放弃了这个想法,并基于django_celery_beat中的一个简单的自定义模型创建了一个简单的自定义模型。这使我能够捎带ScheduledTask模型的任务检测方法,并使用pre_save钩子向Celery发布创建任务。然后我创建了一个单独的Django应用程序来包含它,并与主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)