2016-11-17 16 views
3

申し訳ありませんが、コードサンプルはありません。私が思っていることを実行することもできます。モデルなしのDjango管理画面

私はCeleryタスクを管理するDjangoアプリを作成しています。私はスケジュールされたタスクのためにdjango-celery-beatを使用していますが、同様の管理インターフェースを使用して、パラメータを受け入れるためのフォームでアドホックなタスクを起動したいと思います。私はそれがすべてのアプリケーションがそうであるようにIPと管理セクションに座ってほしいです。今は他の意見はありません。

ModelAdminのすべてのドキュメントは、モデルのカスタムフィールドをベースにしていますが、このオブジェクトを一時的なものとしてモデルに格納する必要はなく、データはセロリのタスクによって保存されるとは思いません。私がドキュメントから理解していることから、カスタム管理ビューをモデルに登録せずに登録することはできません。

私が探しているのは、モデルに関連付けられていないカスタムビューです。管理セクションでこれらの管理コマンドのカスタムフォームを作成できます。私が持っていた

アイデア:

  • Meta
  • managed = Falseダミーモデルを作成し、実際のモデルを作成しますが、ちょうどだけでビューを作成するカスタムModelForm
  • 以内にそれをアクセスすることはありませんし、手動で管理セクションにURLを追加してください。これは最も簡単なアプローチかもしれませんが、他のものがすべて自動生成された場合、管理者の認証システムにリンクするか、管理ページ内にリンクを表示する必要があるか分からないため避けています。

私はすべての合理的な答えをテストし、正しい答えとして最高を選択しますが、すべての応答をupvoteします。

編集:@dejavu_cmd_deltはFlowerという素晴らしい提案をしましたが、可能であれば、すべてadminセクションに統合しておきたいと思います。

答えて

1

私はあきらめました。私はアイデアを放棄し、アドホックタスクのためにdjango_celery_beatにある単純なカスタムモデルを作成しました。これにより、ScheduledTaskのmodelformのタスク検出方法に悩まされ、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) 
は、
関連する問題