很抱歉,我还没有代码示例,因为如果我想到的话甚至可以解决的话,我还是想弄清楚。
我正在编写一个Django应用程序来管理Celery任务。我使用django-celery-beat
进行预定任务,但我希望使用类似的管理界面启动临时任务,并使用表单接受参数。我喜欢它与IP管理部分坐在一起,因为这是所有的应用程序;现在没有其他意见。
ModelAdmin
的所有文档都基于模型的自定义字段,但我不认为此对象需要存储在模型中,因为它们是瞬态的,数据将由Celery任务保存。根据我从文档中理解的内容,您无需注册自定义管理视图而无需尝试使用模型。
我正在寻找的是一个与模型无关的自定义视图,因此我可以在管理部分为这些管理命令创建自定义表单。
我有过的想法:
managed = False
Meta
的虚拟模型
ModelForm
任何指针都表示赞赏。我将测试所有合理的答案并选择最佳答案,但会对所有答案进行投票。
编辑:@dejavu_cmd_delt提出了Flower的好建议,但如果可能的话,我希望将其全部整合到admin
部分。
答案 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)