2017-07-13 8 views
0

以下のようにDjangoモデルを設定しました。複数のテーブルに外部キーとして存在するレコードのフィルタ

class Person: 
    first_name 
    last_name 
    # More_fields 

class Service1: 
    person(fk=Person) 
    # Service1_specific_fields 

class Service2: 
    person(fk=Person) 
    # Service2_specific_fields 

class Service3: 
    person(fk=Person) 
    # Service3_specific_fields 

# More_services 

私は、ユーザーがチェックボックスをマッチングサービスを持つレコードについてのPersonモデルを照会するには、チェックボックスを使用できるようになります「高度な検索」ビューを作成しようとしています。

など。サービス1、サービス2、サービス3のチェックボックスをオンにした場合、結果は3つのサービスをすべて持っている人のみである必要があります。

現在、すべての3つのサービスからすべてのオブジェクトを取得し、それらを互いに比較するように設定されています。予想どおり、これは非常に遅いです。

これにはどのような方法が適していますか?

何について

答えて

0

:あなただけにチェック条件を組み合わせることQ()を使用することができます

(Person 
    .objects 
    .filter(service1__pk__isnull = False) 
    .filter(service2__pk__isnull = False) 
    . and so on 

) 

関連する問題