过滤在多个表中作为外键存在的记录

时间:2017-07-13 13:07:46

标签: mysql django django-models django-queryset

我有如下设置的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模型,以查找具有与选中框匹配的服务的记录。

E.g。如果选中服务1,2和3的复选框,则结果应该只包含具有所有三种服务的人员。

目前,它设置为从所有3个服务获取所有对象并将它们相互比较。正如所料,这非常缓慢。

对此有什么更好的方法?

1 个答案:

答案 0 :(得分:0)

怎么样:

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

 )

您可以使用Q()仅合并已检查的条件。