2017-07-07 17 views
0

私は子供から親のモデルを参照できることを知っていますが、それを他の方法で持つ方法はありますか?親クラスが子クラスにこのようなフィールドがあるかどうかを確認できますか?

ご迷惑をおかけして申し訳ありません。

のは、親が私の質問は何

class Parent(Model): 
    has_this = models.Charfield(max_length=128) 

class Child(Parent): 
    has_that = models.Boolean(default=True) 

ch = Child.objects.filter(id=1).first() // this will be instance of both Parent and Child as expected 

pa = Parent.objects.filter(id=1).first() // is actually return the same as above but does not has the `Child` field `has_that` 

がある場合としましょう、クエリが、私はisisntanceが、用を使用してみましたParent.objects.filter

を使用して呼び出された場合、正規Parentから差動にpaための方法がありますpaの場合は、Parentの場合はchとなります。私はこれを別の方法で考えることはできません。

また、Parentは抽象的ではありません。

P.S.私はhasattrを使用することを考えましたが、これもうまくいかないでしょう。

ありがとうございます。

+0

[Djangoモデルの継承 - クエリ内の親クラスのインスタンスのみが必要です。](https://stackoverflow.com/questions/11853850/django-model-inheritance-only-want-instances-of-parent -class-in-a-query) – dhke

答えて

1

あなたはフィールド名としてサブクラスを使用して、サブクラスのプロパティを参照することができます。

Parent.objects.filter(child__isnull=True) 

は(子供ではありません)すべての裸Parentのインスタンスを生成します。

派生クラスが複数ある場合、これはやや扱いにくくなります。

もちろん、あなたはまた、親クラスを経由して、子フィールドにこの方法を照会することができます

Parent.objects.filter(child__has_that=True) 

Trueに設定has_thatChildrenあるParentのインスタンスを生成します。

関連する問題