- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们正在尝试为 Django API 返回一个标题列表,其中标题可以包含一些关键字。
例如,如果我们使用 __icontains
方法来搜索“money”和“world”(api.com/?keyworld=money&keyword=world
)将返回所有包含金钱、世界或两者的记录。
相关的SQL语句为:
select * from news
where news_source = 1 or news_source = 2
and news_title like '%money%' or news_title like '%world%'
我们正在尝试使用此代码允许用户为 __icontains
以及多个来源拥有多个关键字,因此最终目标是:
api.com/?keyworld=money&keyword=world&source=1&source=2
我们的代码:
def get_queryset(self):
queryset = News.objects.all()
title = self.request.query_params.getlist('title')
source = self.request.query_params.getlist('source')
if title:
queryset = queryset.filter(news_title__icontains=title, news_source__in=source)
return queryset
问题是,如果使用第二个关键字,这只会返回第二个关键字,而不是在 &keyword=
中键入的其他关键字。
最佳答案
您不能对列表执行 __icontains
,但您可以设计一个函数,例如,为列表构造这些值的逻辑或。例如:
from django.db.models import <b>Q</b>
from functools import <b>reduce</b>
from operator import <b>or_</b>
def or_fold(list_of_qs):
if list_of_qs:
return <b>reduce(or_, list_of_qs)</b>
else:
return Q()
def unroll_lists_or(qs, **kwargs):
return qs.filter([
<b>or_fold(Q(**{k: vi}) for vi in v)</b>
for k, v in kwargs.items()
])
然后您可以使用查询集调用 unroll_lists_or
,并且每个项目都应该是可迭代的(例如列表)。然后它将执行列表项之间的或逻辑,以及不同键之间的和逻辑。如果可迭代对象为空,则会被忽略。
所以我们可以将支票写成:
unroll_lists_or(queryset, <b>news_title__icontains=title, news_source=source</b>)
如果 title
包含两个项目(所以 title == [title1, title2]
),而 source
包含三个项目(所以 source = [source1, source2, source3]
),那么这将导致:
qs.filter(
Q(news_title__icontains=title1) | Q(news_title__icontains=title2),
Q(news_source=source1) | Q(news_source=source2) | Q(news_source=source3)
)
然而,您可以将它与 .filter(..)
结合起来进行 __in
检查。例如:
queryset = News.objects.all()
if source:
queryset = queryset.filter(news_source__in=source)
queryset = unroll_lists_or(queryset, news_title__icontains=title)
关于python - icontains 和 getlist django python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51031397/
我正在使用外键在 django 中进行搜索,但它显示此错误“相关字段查找无效:icontains”我在这里找到了类似的情况,但没有工作,我认为错误位于 queryset_list 行中的views
我创建了一个继承 Panel 控件的控件类。然后该控件包含另外两个面板,其中一个我想成为 IContainerControl。 我知道如何将整个控件变成 IContainerControl,但无法对子
我想在我的主页中包含一个搜索字段。它适用于某些模块领域。我的问题是当我使用 ForeignKey 字段时(如果我错了请纠正我)。 模型.py class Location(models.Model):
从应用程序的类内部获取 Autofac 容器的建议方法是什么? Autofac 是否提供解析类上的 IContainer 属性,或者我是否需要在构建容器后全局存储容器? 最佳答案 对于大多数用途,您将
我在 get_or_create 调用中使用 icontains 得到了意外结果。 举个例子: >>>team_name = "Bears" >>>Team.objects.get(name__ico
假设我有一个 WinForms 组件。 它可以是一个基于 System.ComponentModel.Component 的类或 System.Windows.Forms.Control类(实际上 C
既然 ObjectFactory 静态函数已被标记为过时,我目前正在尝试了解结构图。 从长远来看,我必须在 MVC 和 WebApi 应用程序中使用它。以前使用时,静态方法的一行被放置在 global
我得到了这些模型: @python_2_unicode_compatible class Media(models.Model): the_image = FilerImageField(nu
我正在使用 xuggler 将视频转码为不同的格式。如果我直接从文件打开我的 IContainer,它可以完美运行,但是,这次我想使用 InputStream 打开 IContainer。奇怪的是我试
我有这个问题。我的 Django 应用程序模型中有 2 个对象,有标签,并且有包含多个标签的问题,这是一种多对多关系。我正在尝试使用 Q 对象创建一个查询,如下所示: questions = ques
尝试使用ajax请求进行搜索。 prefix = str(request.POST.get('prefix')) colors = UserDataCsv.objects.filter
所以我想在给定的一些字段中找到任何类型的匹配,例如,这就是我想做的: possible_merchants = ["amazon", "web", "services"] # Possible nam
def search(request): queryset_list = Listing.objects.order_by('-list_date').filter(is_published=
我有一个这样的查询: find.where() .or(Expr.or(Expr.like("isbn", query), Expr.i
嗨,我正在尝试通过我得到的字典数据运行模型搜索查询: { "city":5, "direction":"ne", ..other data that can be dynamic..
我见过this question但它并没有回答我的问题,甚至没有很好地提出它。 我认为最好用一个例子来解释这一点: class Blah(Document): someList = ListF
我正在尝试像这样用 xuggle 打开一个视频文件: if (container.open(in, null) < 0) { throw new IllegalArgume
我正在尝试清除我的 C# 项目中的一些警告,其中有几个警告说: Warning 1 The field 'Namespace.Class.components' is assigned but its
当您在 Visual Studio 中创建新窗体时,设计器会在 .Designer.cs 文件中生成以下代码: /// /// Required designer variable. /
我正在尝试在我的管理页面中搜索“vanKit”字段。 “vanKit”是一个外键,每当我添加它时,我的 search_fields 列表都会给我这个错误“相关字段的查找无效:icontains”。
我是一名优秀的程序员,十分优秀!