2011-01-14 13 views
1

私は基本レベルで2つのクラス間の関係を定義したいと思うdjangoアプリケーションがあります。Djangoモデルの継承と関係

class BaseSummary(models.Model): 
    base_types... 

class BaseDetail(models.Model): 
    base_detail_types... 
    base_summary = models.ForeignKey('BaseSummary') 

class ChildSummary(BaseSummary): 
    child_summary_types... 

class ChildDetail(BaseDetail): 
    child_detail_type... 
    child_summary = models.ForeignKey('ChildSummary') 

がいDjangoのサポートこの:私はこのような何かを得るように - それはまた、それらの基底クラスの子供たちとの関係を定義するために私には理にかなっていますか?それがサポートされている場合、これはスケーラビリティの問題を引き起こすようなものでしょうか?

ありがとうございます!

答えて

5

はい、これがサポートされています。はい。パフォーマンス上の問題が発生する可能性があります。あなたは、モデルの継承にヤコブの記事を読んでください。http://jacobian.org/writing/concrete-inheritance/

1.0、Djangoのサポートモデル 継承ので。これはきちんとした機能で、 は、モデリングオプションの柔軟性を高めるために、道を行くことができます。

しかし、モデルの継承も 足で自分自身を撮影する 本当に素晴らしい機会提供しています:コンクリート (マルチテーブル)の継承を。 具体的な継承を使用している場合、Django は、ほぼすべてのクエリで 親テーブルへの暗黙的な結合を作成します。 これはあなたの データベースのパフォーマンスを完全に破壊する可能性があります。

0

これはサポートされており、スケーラビリティの問題は発生しません。しかし、私のアドバイスは、子クラスだけを参照する(つまり、Baseクラスへの参照を作成せず、インスタンス化しない)ことです。

基本モデルクラスは、拡張のみ(他の言語の抽象クラスのようなもの)である必要があります。

関連する問題