2011-11-02 16 views
2

別のdjangoプロジェクト内でdjangoプロジェクトのモデルとやりとりする方法を探しています。私は別のアプリを意味するものではなく、2つの別々の設定ファイルを持つ2つのプロジェクトを意味します。他のdjangoプロジェクト内から外部djangoプロジェクトと対話する

私は古いWebストア(本当に古く、すべて静的なHTMLです)を私たちのdjangoベースのバックエンドに移行する途中です。これを行うために、私はdjango ormと人手による解析のためのいくつかのビューを使用して、クロールと解析のすべてを処理する別々のdjangoアプリケーションを作成しました。今私はバックエンドのカタログデータにクローラプロジェクトに格納されているデータを設定する必要があります。私は最後の2日間のうちに、方法を見つけようと努力しました。運がない。

私が理想的にやってみたいのは、ストアプロジェクトをモジュールとしてdjangoコマンドクラスにインポートしてから、その方法でやりとりすることです(あなたは2つの別々の設定ファイルから作業しているので、setup_environは ' t仕事)。私はクローラデータをシリアライズしてから、ストアからインポートするか、またはdjangoのorm以外のストアデータベースとやりとりしないようにしたいと思います。このプロジェクトはまだ終わっていないので、可能な限り柔軟なものを保つことを好みます。

あなたは何をお勧めしますか?私は、単一のスクリプトの中から両方のプロジェクトのオームムとやりとりできる限り、野生的なアイデアを出しています。

答えて

2

私は... ...この前ので

プロジェクトA、

プロジェクトBがプロジェクトAでモデルを呼び出すために望んでいるプロジェクトBをやった

1 )プロジェクトBは、プロジェクトAと同じユーザー/ログインで同じデータベースに接続します。

もしそうならば、modプロジェクトAからプロジェクトBに移り、通常と同様に対話します。

2)プロジェクトBがプロジェクトAよりも異なるデータベースに接続

あなたは、プロジェクトB.のための設定ファイルで2つのデータベースを定義することができます

DATABASES = { 
    'default': { 
     'NAME': 'app_data', 
     'ENGINE': 'django.db.backends.postgresql_psycopg2', 
     'USER': 'postgres_user', 
     'PASSWORD': 's3krit' 
    }, 
    'users': { 
     'NAME': 'user_data', 
     'ENGINE': 'django.db.backends.mysql', 
     'USER': 'mysql_user', 
     'PASSWORD': 'priv4te' 
    } 
} 

そしてどちらかdb routerはそうDjangoはあなたが明示的に作成するときに使用するDBを設定することができ、プロジェクトAから

OR

のモデルのためのデータを取得するために行くためにどのようなデータベースを知っている定義

Author.objects.using('other').all()

+0

パーフェクト!それはまさに私が探していたものです、ありがとう! – Blake

0

クローラのモデルを新しいプロジェクトに複製して(同じプロジェクト空間に作成されるように)、なぜdjangoのmanage.pyを使用して古いクローラプロジェクトのデータをjsonファイルにダンプして移行するあなたの新しいプロジェクトに

クローラプロジェクトがsettings/db typeに依存しない場合、ハンドラ/ビュー/ URLを新しいプロジェクトに移行して一緒にマージする必要がありますか?

新しいプロジェクトで外部モデルを同期させておくと、余分な作業をする必要がなくなり、南のアプリのようなものを使ってデータコンテキストを移行できます。

このようにして、古いプロジェクトを新しいプロジェクトにインポートして直接操作することができます。

それ以外の場合は、メッセージパッシング/ネットワーク通信、つまりプロセス間通信が検討されています。

+0

あなたがサーバーならば* nixボックスでは、モデルを古いアプリから新しいプロジェクトにシンボリックリンクするだけでも可能です。そうすれば、彼らはどちらも異なったモデルを気に入っているでしょうが、同じコードを使用するので、更新されたときにもう一方が更新されます。 – rossipedia

+0

実際これは素晴らしい提案です。私はそのウィンドウとMacの両方にシンボリックリンクのサポートを追加するだけです。 Windowsではmklinkを通してNTFSによって提供され、Macではエイリアスと呼ばれます。 – astevanovic

+0

私はこのようなことを考えました。シンボリックリンクのアイデアは実際には素晴らしいアイデアです。しかし、それはいくつかの理由で私が避けたいものです。クローラで作業/新規データが処理されているため、あるプロジェクトから別のプロジェクトにテーブルをコピーすると問題が発生します。さらに、データの移行と更新は、クローラが更新内容を把握するための反復的な処理になります。今はテーブルを前後にコピーすることを話しています。最後に、これは世界の終わりではありませんが、クローラ内のすべてのアプリは店舗アプリと名前を共有します。 – Blake

関連する問題