首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django Queryset按精确字符串过滤数组字段

问Django Queryset按精确字符串过滤数组字段
EN

Stack Overflow用户
提问于 2021-07-08 07:51:20
回答 1查看 374关注 0票数 0

所以我和Django合作的时间并不长。我遇到了一个问题,通过传入的数组字符串的确切名称来过滤查询集。目前,我正在通过图标过滤查询集,这是有效的。例如,当前的实现是这样的:如果我传入一个名为"test“的字符串,我的查询集将被过滤,并显示带有"test1”、"test2“和"test3”标签的交易。这不是我想要的。我想按传入的字符串的确切名称进行筛选。因此,如果我有一个"test“作为字符串之一,那么我的查询集将只搜索test,而不是其中包含的任何内容。我尝试过多种实现,比如从图标切换到iexact和exact。

目标。按多个标签数组过滤查询集。

旧查询: values是一个传入的标记(字符串)数组

代码语言:javascript
复制
values = value.replace(" ", "").split(",")
return qs.filter(reduce(operator.or_, (Q(tags__iontains=item) for item in values)))

我试过的方法:我试着用下面的值列表传入iexact。我还试着只传递iexact,然后从数组中只传递一个硬编码的字符串。当我只传入一个带有iexact的字符串时,我会遇到这样的错误:“Unsupported lookup '‘for ArrayField or join on the field not array”,这是有意义的,因为这是一个数组。

代码语言:javascript
复制
values = value.replace(" ", "").split(",")
return qs.filter(reduce(operator.or_, (Q(tags__iexact=item) for item in values)))

有没有人遇到过这个问题,并知道解决方法?我一直在阅读文档和堆栈溢出,但没有找到解决方案。

EN

回答 1

Stack Overflow用户

发布于 2021-07-08 08:30:07

假设这是特定于PostgreSQL的ArrayField -这看起来像overlap查找。也就是说,假设您想要任何指定值的结果。如果您希望结果中包含所有指定值,则为contains。

从文档中:

代码语言:javascript
复制
overlap

Returns objects where the data shares any results with the values passed. Uses the SQL operator &&. For example:

>>> Post.objects.create(name='First post', tags=['thoughts', 'django'])
>>> Post.objects.create(name='Second post', tags=['thoughts'])
>>> Post.objects.create(name='Third post', tags=['tutorial', 'django'])

>>> Post.objects.filter(tags__overlap=['thoughts']) <QuerySet [<Post: First post>, <Post: Second post>]>

>>> Post.objects.filter(tags__overlap=['thoughts', 'tutorial']) <QuerySet [<Post: First post>, <Post: Second post>, <Post: Third post>]>


>>> Post.objects.filter(tags__contains=['thoughts']) <QuerySet [<Post: First post>, <Post: Second post>]>

>>> Post.objects.filter(tags__contains=['django']) <QuerySet [<Post: First post>, <Post: Third post>]>

>>> Post.objects.filter(tags__contains=['django', 'thoughts']) <QuerySet [<Post: First post>]>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68294069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档