2016-09-12 9 views
1

私は基底クラスPublicationを持っています。BookMagazineから継承しています。クエリに一致する子モデルのすべてのインスタンスを見つける

class Author(models.Model): 
    pass 

class Publication(models.Model): 
    author = models.ForeignKey(Author) 

class Book(Publication): 
    pass 

class Magazine(Publication): 
    pass 

私は特定の著者ですべてBookMagazineオブジェクトを検索します。

# Both of these return Publication objects, not Book/Magazine objects 
Author.objects.get(pk=1).publication_set 
Publication.objects.get(author_pk=1) 

特定の著者で、子クラスのすべてのインスタンスを取得する方法があります:Authorへの外部キーは、親クラスPublication上にあるので、クエリで私の試みはすべてPublicationのオブジェクトではなく、子クラスを返しますBook.objects.get(author_pk=1)のようなすべての子クラスのクエリを手動で実行する必要はありません(実際には、2つ以上の子クラスがあります)。

+0

、使用しているDjangoのバージョンを明記してください。 – wim

+0

@wim Django 1.10 – Flash

答えて

0

この種の機能を使用するには、外部パッケージを使用する必要があります。これはあなたが必要なもののようになります。具体的にhttps://django-model-utils.readthedocs.io/en/latest/managers.html#inheritancemanager

from model_utils.managers import InheritanceManager 

class Place(models.Model): 
    # ... 
    objects = InheritanceManager() 

class Restaurant(Place): 
    # ... 

class Bar(Place): 
    # ... 

nearby_places = Place.objects.filter(location='here').select_subclasses() 
for place in nearby_places: 
    # "place" will automatically be an instance of Place, Restaurant, or Bar 
+0

関連:http://stackoverflow.com/a/18743205/674039 – wim

関連する問題