2017-07-13 34 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 

我試圖創建一個「高級搜索」的觀點,將允許用戶使用複選框來查詢有匹配檢查框的服務記錄的人物模型。

E.g.如果檢查服務1,2和3的複選框,則結果應該只包含擁有全部三項服務的人員。

目前它設置爲從所有3個服務中獲取所有對象並將它們相互比較。正如所料,這非常緩慢。

這是什麼更好的方法?

回答

0

關於什麼:

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

) 

您可以使用Q()結合剛纔檢查的條件。