2016-11-17 165 views
3

對不起,我還沒有代碼示例,因爲我試圖解決我是否可以完成的任務。沒有模型的Django管理視圖

我在寫一個Django應用程序來管理Celery任務。我正在使用django-celery-beat進行計劃任務,但我想要一個類似的管理界面來啓動臨時任務,並使用表單接受參數。我希望它與IP坐在管理部分,因爲這是所有的應用程序;目前沒有其他意見。

ModelAdmin的所有文檔都基於模型的自定義字段,但我不認爲此對象需要存儲在模型中,因爲它們是暫態的,數據將由Celery任務保存。根據我從文檔中瞭解的內容,您無法註冊自定義管理視圖,而無需將其用於模型。

我在尋找的是一種自定義視圖,它與模型無關,因此我可以在管理部分爲這些管理命令創建自定義窗體。

想法我有:

  • Meta
  • managed = False創建一個虛擬模型創建一個真正的模型,只是從來沒有訪問自定義內ModelForm
  • 只需創建一個視圖,手動將該網址添加到管理部分。這可能是最簡單的方法,但我一直在避免,因爲我不確定將其綁定到管理員的身份驗證系統或在自動生成其他所有內容時在管理頁面中顯示鏈接需要什麼。

任何指針讚賞。我會測試所有合理的答案,並選擇最好的答案作爲正確答案,但會贊成所有答案。

編輯:@dejavu_cmd_delt提出了Flower的好建議,但我想盡可能將它全部集成在admin部分。

回答

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)