1 つのデータベースを持つ 2 つの Django プロジェクト

okwaves2024-01-25  7

すべての顧客が使用するダッシュボードを Django で構築しました。彼らのアクティビティを監視できるように、自分用の内部ダッシュボードを構築したいと考えています。ダッシュボードと同じデータベースに接続する必要があります。これを行う方法について質問があります:

同じデータベースを settings.py に追加し、内部ダッシュボードでモデルを再定義するだけですか?

ありがとう!これを行うより良い方法がある場合は、お知らせください。

1

これを行うには、いくつかのオプションがあります。同じデータベースに接続して ev をレプリケートするすべては可能ですが、最適とは程遠いです。両方に同じコードベースを使用し、Django サイト システムを使用して Web サイトを分割することもできます。または、内部ダッシュボード用に別のアプリを作成し、両方のサイトにインストールすることもできます。または、複製を避けるために、内部ダッシュボード アプリケーションから 1 つ (または両方?) のアプリケーションをインポートすることもできます。

– ウルフ

2020 年 9 月 5 日 0:59

同じ Django プロジェクトに別のアプリを追加してみてはいかがでしょうか?アプリの概念は完全に、同じプロジェクト内で複数のエンティティを定義することです。

– willeM_ ヴァン オーnsem

2020 年 9 月 5 日 0:59

@Wolph なるほど、ここでの最良の選択肢は Django サイトを使用することですか?こちらもドメイン変更は可能でしょうか?それともロードバランサーを分離する必要がありますか?ありがとう!

– 

user14174047

2020 年 9 月 5 日、1:15

@WillemVanOnsem 追加のアプリを追加するとき、Wolph が述べたように Django サイトを使用するだけでよいでしょうか?それらを異なるエンドポイントに配置したいと考えています。

– 

user14174047

2020 年 9 月 5 日、1:15

Django サイト システムは、主に、複数の Web サイトに使用される単一のコードベースがあることを前提としています。つまり、同じアプリ、同じデータベース、同じ URL 構造になります。ただし、サイトごとに個別のドメイン名を使用することは可能です。

– ウルフ

2020 年 9 月 5 日 9:34



------------------------

複数の Django プロジェクトが 1 つのデータベースを共有できます。それで害はありません。守るべき唯一のもの簡単にするために、プロジェクトのうち 1 つだけで移行を実行する必要があることに留意してください。

元のアプリケーションから次のコマンドを実行することで、内部アプリケーション用の models.py ファイルを生成できます。

python manage.py inspectdb > models.py

これにより、既存のデータベースから Django モデル ファイルを生成できます。デフォルトでは、inspectdb は Model.Meta.managed = False でモデルを生成します。つまり、生成されたモデルが使用されるこの特定のアプリケーションは、データベース テーブルの作成、削除、更新を担当しません。生成されたモデルの場合、inspectdb はすべての関係をForeignKey として生成し、関係を維持するためにテーブルを通じて生成するため、関係を構成する必要がある場合があります。要件に基づいて、relative_names を指定する必要がある場合もあります。

要約すると、複数の Django プロジェクト間で同じデータベースを使用できます。詳細についてはドキュメントをご覧ください

10

ご回答いただきありがとうございます。この方法は、上で推奨されているように Django サイトを使用する方が良いのでしょうか?

– 

user14174047

2020 年 9 月 5 日 6:48

django-sites フレームワークは、次のことを前提としています。2 つの異なるドメインで同じコード ベースを使用します。あなたの場合、管理サイトを内部ツールとして使用したいと考えています(管理者はパブリックネットワークからアクセスできないと仮定しました。サイトフレームワークでは、パブリックネットワークから管理者サイトへのリクエストを防ぐために追加の作業を行う必要があります)。上記のとおりです。データベースを共有するアプローチの方が適切だと思われます。

– アラムシャフィ2263

2020 年 9 月 5 日 14:50

なるほど、確認のため、モデルが変更されるたびに、inspectdb コマンドを実行する必要があります。ダッシュボードですか?

– 

user14174047

2020 年 9 月 5 日 20:33

いいえ。 Inspectiondb を一度実行することさえ必須ではありません。すぐにモデルをコピーして貼り付け、managed = False を設定するだけです。ただし、inspectdb は、元のモデルにアクセスできない場合、またはプロジェクトをレガシー データベースと統合する場合に役立ちます。

– アラムシャフィ2263

2020 年 9 月 6 日 2:25

なるほど、これは理にかなっています。ところで、レガシー データベースとは何を意味しますか?

– 

user14174047

2020 年 9 月 7 日 5:22



------------------------

#ターミナルでこのコードを実行し、データベース テーブルにアクセスするアプリ名を記述するだけです

python manage.py Inspectiondb > your_app_name/models.py

共有 この回答を改善します フォローする

2022 年 10 月 12 日午前 10 時 59 分に回答

ディパック・サバリヤ

ディパック・サバリヤ

1

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。