django restframework:如何有效地搜索多个相关领域?

时间:2017-10-16 15:32:04

标签: django django-rest-framework django-queryset

鉴于这些模型:

    class B:

        my_field = TextField()


    class A:
        b = ManyToMany(B)

我在A中有+ 50K行,在搜索要在my_field上进行全文搜索的元素时,遍历多对多字段b(即b__my_field })。

当每个B对象的多个元素A的数量小于~3时,这种方法很有效。但是,如果我的表现比表现更好,那么表现会令人印象深刻。

想知道我是否可以进行某种与预取相关的搜索?干草堆是我唯一的选择吗?

1 个答案:

答案 0 :(得分:0)

当您遍历查询集时,django会为循环的每个步骤发出数据库请求。有关ORM陷阱的信息,请参阅this。使用django ORM时应该学习的一点是使用命令尽可能避免数据库往返。一种方法是使用values()函数。理想情况下,你应该只得到你需要的东西。 试试这个:

l = list(A.b.all().values('my_field'))

这只保证一个数据库查询,并返回一个可以以python速度循环的列表。应该快得多。