gpt4 book ai didi

Django 干草堆 : filter query based on multiple items in a list.

转载 作者:行者123 更新时间:2023-12-03 01:07:35 24 4
gpt4 key购买 nike

我有可以属于一个或多个组织模型实例的事件模型实例。我已经实现了 haystack 2.0.0 来索引我的所有事件。这是一个搜索索引示例。

class EventIndex(indexes.SearchIndex, indexes.Indexable):

text = indexes.CharField(document=True, use_template=True)
organization_slug = indexes.CharField(model_attr='organization__slug',
weight=5.0)
organization_name = indexes.CharField(model_attr='organization__name',
weight=5.0)
name = indexes.CharField(model_attr='name', weight=10.0)

....

def get_model(self):
return Event

def index_queryset(self):
return Event.objects.filter()

我的问题是如何构造一个 SearchQuerySet 查询来根据一个或多个组织过滤事件。例如,我想查找属于“orgnization1”和“organization3”的所有事件(其中组织列表可以是任意长度)

作为 Django 查询,它可能看起来像这样:

Event.objects.filter(organization__in=[orgnization1, organization3]).filter(...)

如何将其转换为干草堆查询?这是我的尝试,但我真的不知道我在做什么......

organization_list = [organization1.slug, organization2.slug]
SearchQuerySet().filter_or(organization__contains=organization_list)

以下是我的模型外观的示例:

class Event(models.Model):
name = models.CharField(max_length=64)
organization = models.ForeignKey('mymodule.Organization')
...

class Organization(models.Model):
slug = models.SlugField(max_length=64)
name = models.CharField(max_length=64)
...

非常感谢任何帮助。

最佳答案

我想我已经找到解决方案了。只是分享而已。显然,Haystack 有一个名为 SQ() 的对象,其功能类似于 Django 的 Q() 对象。我发现您可以在 Django 的 Q 对象实例上调用 add() 方法来添加更多查询参数。看来SQ的工作原理是一样的。

from haystack.forms import SearchForm
from haystack.query import SQ, SearchQuerySet
from haystack.views import SearchView

class CustomSerchView(SearchView):


def __call__(self, request):

self.request = request

########### Custom stuff
user = request.user
organization_list = [organization1.slug, organization2.slug, ....]

sq = SQ()
for slug in organization_list:
sq.add(SQ(organization_slug=slug), SQ.OR)
sqs = SearchQuerySet().filter(sq)
##########

self.form = self.build_form(form_kwargs={'searchqueryset':sqs})
self.query = self.get_query()
self.results = self.get_results()
return self.create_response()

关于 Django 干草堆 : filter query based on multiple items in a list.,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9132647/

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