私は Django を使用して、製品とそのコメントをリストする Web サイトを開発しています。製品オブジェクトが異なる国ごとに個別のサイトを作成したいと考えています。例えば:
us.domain.com - 米国の製品がリストされ、ページは英語です。
fr.domain.com - フランスの製品がリストされ、ページはフランス語などです。
1) 思いついたのは、ミドルウェアで要求されたサブドメインに応じて settings.SITE_ID を変更することですが、これは危険だと言われています。他に何ができますか?国ごとに個別のインスタンスや settings.py ファイルを実行したくありません。
これまでの私の解決策:
class SubdomainMiddleware:
def process_request(self, request):
host = request.META.get('HTTP_HOST', '')
try:
site = Site.objects.get(domain=host)
except:
site = Site.objects.get(domain='www.domain.com')
request.site = site
products = Product.objects.filter(site_id=request.site)
ここでは、CurrentSiteManager が request.site ではなく settings.SITE_ID を使用するため、以下は機能しません。
on_site = CurrentSiteManager()
Product.on_site.all()
各クエリで明示的に site_id=request.site を渡す必要があります。これは安全ですか、それとも他の代替手段はありますか?
2) site = models.ForeignKey(Site) フィールドを Product モデルに追加すれば十分ですか? または、コメントなどの他のすべてのモデルにそのフィールドを追加する必要がありますか?