【问题标题】:Which attribute of SearchQuerySet has the same function as prefetch_related?SearchQuerySet 的哪个属性与 prefetch_related 功能相同?
【发布时间】:2016-03-07 17:31:42
【问题描述】:
def get_books_by_query_params(context, query, query_parameters):
binding_query = query_parameters['binding_query']
query_parameters['validate']=1
default_query = None
if query:
    default_queries = [
        Q(title__icontains=query),
        Q(isbn_10__contains=query),
        Q(isbn_13__contains=query),
        Q(publishers=Publisher.objects.filter(name=query)),
        Q(institutes=Institute.objects.filter(name=query)),
        Q(authors=Author.objects.filter(name=query)),
        Q(sellers=Seller.objects.filter(name=query))
    ]

    default_query = reduce(operator.or_, default_queries)
    default_query = default_query & binding_query if binding_query is not None else default_query
elif binding_query is not None:
    default_query = binding_query

if default_query is not None and query_parameters['query_parameters'] is not None:
    books = Book.objects.filter(default_query, validate=1, **query_parameters['query_parameters']).distinct()\
        .prefetch_related('authors').prefetch_related('publishers').prefetch_related('sellers').prefetch_related('institutes')
elif query_parameters['query_parameters']:
    books = Book.objects.filter(validate=1,**query_parameters['query_parameters']).distinct()\
        .prefetch_related('authors').prefetch_related('publishers').prefetch_related('sellers').prefetch_related('institutes')
elif default_query:
    books = Book.objects.filter(default_query,validate=1).distinct().prefetch_related('authors').prefetch_related('publishers').prefetch_related('sellers').prefetch_related('institutes')
else:
    books = Book.objects.filter(validate=1).distinct().prefetch_related('authors').prefetch_related('publishers').prefetch_related('sellers').prefetch_related('institutes')

context['books'] = books
return context

如何使用 searchqueryset 编写以下代码?在这种情况下可以使用 searchqueryset 中的 prefetch_related 等效项吗?

【问题讨论】:

  • 请解释一下 pefetch_related 是做什么的?
  • pefetch_related 获取之前选择的过滤器。
  • 我试过了,没用。我的 url 必须是类似于 /search/?query=ABC&author_id =1 的请求,它将获取作者 ID 并进行相应的过滤
  • 您应该将filter_and 与字段搜索结合起来

标签: python django django-haystack searchqueryset


【解决方案1】:

filter_and:

SearchQuerySet.filter_and(self, **kwargs)

通过查找(并包括)某些属性来缩小搜索范围。查询中的联接行为被强制为 AND。用过的 主要是通过过滤方法。

【讨论】:

    猜你喜欢
    • 2015-05-28
    • 2010-10-04
    • 2011-08-19
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多