检查 Django 查询集过滤中字段列表的 is_null

2024-03-15

我已经使用此字段创建模型:

field_1 , field_2, field_3, ... , field_n

我想要filter这 k 个字段的所有对象:

field_1 , field_2, .... , field_k

这些对象中的 n 不是Null.

我的错误答案:

我确实认为我必须创建要在查询中设置的字段列表:

my_list = [`field_1` , `field_2`, .... , `field_k`]

并像这样创建我的查询:

my_objects = Class.objects.filter([ (eval(field_name +"__isnull = False") )  for field_name in my_list ])

但这是错误的。我怎样才能做到这一点?


你把事情搞得太复杂了,你不能用字符串构造一个列表并将其传递给filter(..)希望它能起作用。此外eval(..)事实并非如此,即使这样做,也会导致严重的安全风险。eval(..) and exec(..)应尽可能避免,因为从有人设法将字符串“注入”到其中的那一刻起,他们就可以在您的服务器上运行任意代码,从而尝试“转储数据库”等。参见这个答案 https://stackoverflow.com/questions/1832940/why-is-using-eval-a-bad-practice更深入地分析原因“评估是不好的做法".

您可以构造一个字段名称列表(即字符串):

my_list = ['field_1', 'field_2', 'field_k']

然后我们可以构造一个字典并执行字典解包,例如:

Class.objects.filter(**{'{}__isnull'.format(f): False for f in my_list})

两个星号(**),因此将进行函数调用,使得f(**{'a': 4, 'b': 2}), 是相同的f(a=4, b=2),因此在这里它将进行类似的调用.filter(field_1__isnull=False, field_2__isnull=False, field_k__isnull=False).

或者自从python-3.6 /questions/tagged/python-3.6,我们可以利用F 弦:

Class.objects.filter(**{f'{f}__isnull': False for f in my_list})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检查 Django 查询集过滤中字段列表的 is_null 的相关文章

随机推荐

  • 如何设置 git 提交消息的模式?

    我想限制提交的人具有特定的提交消息格式 我该怎么做 例如 Pair Name Story Number Commit Message 有一个pre commit msg or commit msg钩子 你可以使用 http www kern
  • 使用函数给定的值初始化 numpy 数组的最快方法

    我主要对 d1 d2 numpy 数组 矩阵 感兴趣 但这个问题对于具有更多轴的数组来说是有意义的 我有函数 f i j 我想通过该函数的某些操作来初始化数组 A np empty d1 d2 for i in range d1 for j
  • JFrame java中的无限消失-重新出现循环

    作为继这个帖子 https stackoverflow com questions 34593471 why do i need to reset settext in a jlabel to prevent errors 34598241
  • 如何获取侧边栏下拉列表中所有工作表的列表

    我正在谷歌工作表的侧边栏菜单中工作 以设置我的脚本中需要的一些变量 我的脚本已经可以运行了 这很简单 在提交表单时 它将在我的日历中创建一个事件 但是 为了简化脚本的安装 我想在侧边栏中显示一个下拉列表 其中包含工作表中所有工作表的名称 我
  • 克隆Conda根环境不会克隆conda和condo-build

    我在 OS X El Capitan 10 11 4 上使用 conda 4 2 9 我使用以下命令克隆了根环境 conda create n rootclone clone root 它给出了以下消息 The following pack
  • 为什么 spread() 方法在 Sequelize 中不起作用?

    我正在使用一个Sequelize for my node js应用程序 我用findOrCreate 方法创建新用户 如果不存在 据此docs http docs sequelizejs com manual tutorial models
  • 如何更改微调器背景颜色?

    如何更改微调器背景颜色 这种黑色来自风格 如何更改弹出窗口的样式颜色 我想将背景颜色更改为白色而不是黑色 我该如何改变 spinnner
  • 使用 Moose 时在构造时分配方法体的最佳方法是什么?

    我在用着Moose 具体来说MooseX Declare 创建一个迭代器对象 Iter其中有一个next前进状态并返回的方法0 or 1根据需要使用在while陈述 我遇到的问题是 根据构造参数之一的存在 next需要执行两组截然不同的操作
  • 如何将 jquery ui 与 Bower 一起使用?

    我正在尝试yeoman http yeoman io and bower http bower io 我使用以下命令创建了一个 yeoman webapp yo webapp 我想用jqueryui http jqueryui com 所以
  • 如何在组件绘制时创建“请稍候”Swing 对话框

    对于 Swing 来说仍然相对较新 但经过几个小时的搜索 我无法在网上找到答案 因此写了这篇文章 抱歉 如果已经回答但我忽略了它 我在 Swing 应用程序中使用 JFreeChart 有些图表相对较重 180k 数据点 并且 JFreeC
  • 使用javascript正则表达式验证日期的问题[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在尝试
  • React Js Es6 风格的三元运算符

    我正在尝试添加以下三元运算符以在我登录时显示我的按钮并且如果我不隐藏它 下面的内容不断向我抛出错误 img src this state photo alt style display display none 您提供给 style 属性的
  • Haskell:如何使运行外部命令的函数超时

    我在函数内调用外部程序 现在我想让这个函数超时 而不仅仅是外部程序 但是在函数超时之后 外部程序仍然在我的计算机上运行 我使用的是debian 直到它完成计算 之后它的线程仍然作为我的主程序的子线程保留在进程表中 直到主程序终止 这是两个最
  • 如何在现有网页Editor Palette中提供自定义组件

    我想在网页编辑器面板中添加一个名为 myHTMLComponent 的新自定义组件 因此 一旦用户使用 WPE 打开任何 html 页面 myHTMLComponentM 就应该出现在那里 我该如何做需要的事情 而且这个组件还需要相应地生成
  • 使用 PostgreSQL 配置 Keycloak

    我使用 JDBC 开发 Spring Boot Rest API 项目 数据库是 PostgreSQL 我用Keycloak添加了授权 我想使用用户联合 因为我想在 PostgreSQL 数据库中使用用户 我该如何使用它以及不使用用户联合的
  • awakeFromNib 没有在自定义单元类中被调用,因为 IBOutlet 为零

    我是 iOS 编程新手 我创建了一个 customcell 类 并且 awakefromnib 方法没有被调用 因为 IBOutlet 为零 这让我发疯 请帮忙 我使用故事板而不是 xib 我最近遇到了这个问题 这是由于错误注册单元造成的
  • 移动应用程序的后端服务器提供商[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我的移动应用程序需要一个后端服务器 我需要能够编写服务器端逻辑 这样我就不需要下载整个数据库 我正在为
  • 指示浏览器缓存忽略某些 URL 参数

    我想要两个 iframe 它们在不同时间加载以映射到浏览器中的相同缓存值 服务器与此无关 基本上 有没有办法让 chrome firefox 等 缓存 api 在查找 src 时忽略某些参数 在本例中为 运行时 传递单独的参数或对运行时进行
  • iOS:故事板和侧菜单作为 facebook 应用程序 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何创建带有故事板和导航控制器的隐藏菜单 谢谢你 查看这个 Github 项目 ECSlidingViewController 这正是
  • 检查 Django 查询集过滤中字段列表的 is_null

    我已经使用此字段创建模型 field 1 field 2 field 3 field n 我想要filter这 k 个字段的所有对象 field 1 field 2 field k 这些对象中的 n 不是Null 我的错误答案 我确实认为我