2017-07-13 33 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()结合刚才检查的条件。