2017-06-27 10 views
1

私はあるモデルからの入力を受け取り、それをクエリし、ForeignKey関係を通じて別のモデルにクエリのさまざまな結果を追加するpythonスクリプトを作成しました。それはpythonシェルから素晴らしい作品が、私は最初のモデルのための新しいオブジェクトが提出されるたびに、スクリプトを実行し、他のデータベースを自動的に更新するように管理Webページから実行する方法があるのだろうかと思っていたモデル。私は非常に柔軟なインターフェイスだとわかって以来、スタッフがデータ入力を行うための開発の一環としてDjango管理インターフェースを使用しています。スクリプトはこのアプリ専用に書かれているので、アプリのフォルダにあります。Django Adminウェブページから直接カスタムPythonスクリプトを実行する

+0

これはDjangoコマンド(つまり 'manage.py'経由で実行するもの)またはスタンドアロンスクリプトですか? – Chris

+0

これはDjangoのコマンドを使って作成されたもので、manage.pyを使って簡単に実行できます。 – Giannina

答えて

0

これはまだ答えられていないことに私は驚きました。

既存のスクリプトをmanagement commandとしてラップするか、管理コマンドにインポートします。

これを済ませたら、問題の管理ビューl ike this.を上書きすることができます。

from django.contrib.admin import AdminSite 
from django.views.decorators.cache import never_cache 

class MyAdminSite(AdminSite): 
    @never_cache 
    def index(self, request, extra_context=None): 
     # do stuff 

次に、このクラスのインスタンスを作成し、admin.siteではなくこのインスタンスを使用してモデルを登録します。

admin_site = MyAdminSite() 

すると、それ以降:

from somewhere import admin_site 

    class MyModelAdmin(ModelAdmin): 
    ... 

    admin_site.register(MyModel, MyModelAdmin) 

最後に、その上書きビューで、あなたはcall the management commandにあなたのコードからmanagement.call_commandを使用することができます。これにより、コマンドラインからもコード内からでも使用することができます。必要に応じて、cronからもスケジューリングできます。 :)

+0

これはとても役に立ちます、ありがとうございます! – Giannina

関連する問題