背景: 5 つの独立した Django プロジェクトがあり、複数のアプリで構成される 1 つの Django プロジェクトに結合しようとしています。つまり、projA には appA、projB には appB、projC には appC などがあります。appA、appB、appC を持つ masterProj が 1 つ必要です。
現在、各アプリは独自の独立したデータベースに接続しています (アプリはデータを共有しません)。各プロジェクトは、Django ユーザー認証、Django 登録、taggit、プロファイル、コメント、および sorl-thumbnail を使用します。
私はDjango 1.4を使用しており、このスタックオーバーフローの回答に従ってデータベースルーティングをセットアップしているため、1つのプロジェクトに結合されると、新しく結合されたDjangoプロジェクトの各アプリは引き続き独自のデータベースに接続できます。それはスムーズに進みましたが、ユーザー認証や taggit などで問題が発生し始めました。
1)前述のように、各アプリは異なるデータベースに接続し、それらの各データベースには「auth_user」という名前のテーブルがあります。ただし、auth_user テーブルへのすべての読み取り/書き込み呼び出し (読み取り/書き込み呼び出しを行うアプリに関係なく) は、既定のデータベース (この場合は appA のデータベース) にルーティングされることがわかりました。
# settings.py:
DATABASES['default'] = DATABASES['appA']
DATABASE_ROUTERS = ['appA.db.DBRouter', 'appB.db.DBRouter', 'appC.db.DBRouter']
# appA/dbrouterA.py (appB, appC routers are identical this, replacing 'appA' with 'appB', etc.)
class DBRouter(object):
def db_for_read(self, model, **hints):
if model._meta.app_label == 'appA':
return 'appA'
if model._meta.app_label == 'auth':
return 'appA'
return None
def db_for_write(self, model, **hints):
if model._meta.app_label == 'appA':
return 'appA'
if model._meta.app_label == 'auth':
return 'appA'
return None
2) ルーティングが機能すると仮定すると、ユーザーが appA にログインした場合、 appB にログインしたくありません。多くの人が逆の質問を投稿しているのを見てきました (アプリでユーザー資格情報を共有したい) が、同じプロジェクト内のいくつかの独立したアプリで Django ユーザー認証を正常に使用した人はいますか? もしそうなら、どうやってこれをしましたか?
3) taggit コードから次のエラーが表示されますが、"related_name" パラメーターを taggit に渡す方法がわかりません。私は taggit の基本的な実装を使用しています - 何もサブクラス化していません:
# appA/models.py
tags = TaggableManager(blank=True)
# appB/models.py
tags = TaggableManager(blank=True)
エラー:
appA.userprofile: Accessor for m2m field 'tagged_items' clashes with related m2m field 'TaggedItem.userprofile_set'. Add a related_name argument to the definition for 'tagged_items'.
appB.userprofile: Accessor for m2m field 'tagged_items' clashes with related m2m field 'TaggedItem.userprofile_set'. Add a related_name argument to the definition for 'tagged_items'.
4)これらのアプリをすべて組み合わせるのは、滑りやすい坂道だと感じ始めています。後で、sorl-thumbnail またはまだ表面化していないコメントで問題が発生する可能性があります。アプリを 1 つのプロジェクトにうまく組み合わせた人はいますか? それとも、Django が基本的にサポートしていないことをしようとしているのですか?
助けてくれてありがとう!