5

今日は、Django に関する設計/アーキテクチャに関する質問があります。

私は、地理データ (州、町など) を個別に必要とする複数の Web サイト (同じサーバーでホストされている) で作業しています。各プロジェクトにはアプリが含まれ、各アプリにはForeignKey町または州のフィールドを持つモデルが含まれる場合があります。

繰り返しませんが、これらの町や州を保存するデータベースを構築し、それを Django プロジェクトで使用するつもりはありません。

Django は、同じプロジェクトで複数のデータベースを使用する簡単な方法を提供します。settings.pyファイル内でデータベースを宣言し、ルーター クラスを作成して読み書きを保持します。しかし、そのように、select_related次のようなステートメントを使用することは不可能です:

job = get_object_or_404(Jobs.objects.select_related('state__town'), user=user)

この動作は私にとって自然なことです (データベース間の結合を最初から行うことは不可能です)...

私の質問:

  • dblinksの導入を検討するのは良い考えですか(私はそうは思いません...)、Django はそれを処理できますか (この部分のドキュメントは見つかりませんでした)?
  • この状況に直面した場合、どのように進めますか?

手っ取り早い解決策は、各プロジェクト データベースにすべての地理データ (町、州など) をインポートすることですが、DRY ではありません :( :

python manage.py loaddata geo.json

別の解決策は、他のプロジェクトにデータを「提供」できる(方法はわかりません)別の「ジオ」アプリを構築することです...実際、私はGeoDjangoを試しましたが、それは本当に複雑なようです。おそらく私の質問には答えないでしょう!

回答ありがとうございます。

4

2 に答える 2

1

このデータの静的性によっては、Pythonでこれらの町と州を一度定義してから、この定義をすべての個別のプロジェクトにインポートするのが最も簡単な方法です。

# locations.py
STATES = (('S1', 'State 1'), ('S2', 'State 2'))
TOWNS = (('T1', 'Town 1'), ('T2', 'Town 2'))

そして、外部キーを使用する代わりに、オプションkwargを指定するcharfieldを使用できます。

# app/models.py
from django.db import models
import locations # its on the path somewhere!

class MyModel(models.Model):
    state = models.CharField(max_length=5, options=STATES)
    town = models.CharField(max_length=5, options=TOWNS)

このアプローチは更新が非常に簡単ではなく、町と州の関係を記録しません(つまり、町は1つの州にあります)が、非常に単純です。

于 2011-05-24T21:47:24.997 に答える
1

データベース ビューを作成して、他のデータベースから静的データを取り込むことができます。その後、モデルはこのデータベース ビューを指すことができます。データベース ビュー内で結合を作成することもできます。

于 2011-05-25T06:52:55.527 に答える