gpt4 book ai didi

django - 选择要与SearchQuerySet一起使用的模型

转载 作者:行者123 更新时间:2023-12-02 23:38:12 25 4
gpt4 key购买 nike

我有一些代码包含如下搜索功能:

def searchHay(request):
content = sorted(request.GET.getlist('content', ''))
sqs = SearchQuerySet().facet('this').facet('that').facet('the_other')

# This if/else block is perhaps not a very good solution...
if "things" in content and "stuff" in content:
sqs = sqs.models(Things, Stuff)
elif "things" in content:
sqs = sqs.models(Things)
elif "stuff" in content:
sqs = sqs.models(Stuff)

sqs = sqs.order_by('sort_field')
view = search_view_factory(
view_class=FacetedSearchView,
template='search/search.html',
searchqueryset=sqs,
form_class=AllFacetedSearchForm
)
return view(request)

如您所见,将根据用户提交表单时选择的某些选项来搜索不同的模型,这些选项在此处作为“内容”传递。这可行,但是随着模型数量的增加变得非常麻烦。如果有人对采用更优雅的方法有任何建议,那么我很想知道它们是什么。

最佳答案

一种简单的解决方案是拥有“独立的if”,而不是:

# This if/else block is perhaps not a very good solution...
if "things" in content and "stuff" in content:
sqs = sqs.models(Things, Stuff)
elif "things" in content:
sqs = sqs.models(Things)
elif "stuff" in content:
sqs = sqs.models(Stuff)

你可以有:
if "things" in content:
sqs = sqs.models(Things)

if "stuff" in content:
sqs = sqs.models(Stuff)

这样,您就不需要管理“多个选择”,如果内容中包含 thingsstuff,它将自动添加两个过滤器。而且,如果将来需要添加更多模型,则只需为每个模型添加一个即可。

我以为如果您先进行sqs = sqs.models(Things)然后再进行sqs = sqs.models(Stuff),结果将为0或为空,但是...

我在控制台上对其进行了测试,以确保能给我带来惊喜。
  • sqs = sqs.models(Things)
  • sqs.count() <-此返回值表示100
  • sqs = sqs.models(Stuff)
  • sqs.count() <-这将返回100 +模型Stuff的对象

  • 因此,您可以具有独立的ifs,并且它将按您的预期工作,因为似乎您可以这样做:
  • sqs = sqs.models(Things)
  • sqs = sqs.models(Stuff)

  • 将与 sqs.models(Things, Stuff)相同

    关于django - 选择要与SearchQuerySet一起使用的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27543612/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com