带有数字键的 Django postgres Json 字段

2024-03-28

我有带有 postgres json 字段的模型。

class MyModel(models.Model):
    data = JSONField(null=True)

然后,我这样做:

m1 = MyModel.objects.create(data={'10':'2017-12-1'})
m2 = MyModel.objects.create(data={'10':'2018-5-1'})

我想查询所有键'10'以'2017'开头的MyModel,所以我想写:

MyModel.objects.filter(data__10__startswith='2017')

问题在于 10 被解释为整数,因此在生成的查询中它被视为列表索引而不是键。 有办法解决这个问题吗? (编写原始查询除外)。

这是生成的查询:

SELECT "systools_mymodel"."id", "systools_mymodel"."data" FROM "systools_mymodel" WHERE ("systools_mymodel"."data" ->> 10)::text LIKE '2017%' LIMIT 21;

我希望引用 10(这会给我正确的答案)。

Thanks!


一个非常黑客的解决方案(使用风险自负,在 Django 2.0.5 下测试,保修无效......):

# patch_jsonb.py
from django.contrib.postgres.fields.jsonb import KeyTransform


def as_sql(self, compiler, connection):
    key_transforms = [self.key_name]
    previous = self.lhs
    while isinstance(previous, KeyTransform):
        key_transforms.insert(0, previous.key_name)
        previous = previous.lhs
    lhs, params = compiler.compile(previous)
    if len(key_transforms) > 1:
        return "(%s %s %%s)" % (lhs, self.nested_operator), [
            key_transforms] + params
    try:
        int(self.key_name)
    except ValueError:
        if self.key_name.startswith("K") and self.key_name[1:].isnumeric():
            lookup = "'%s'" % self.key_name[1:]
        else:
            lookup = "'%s'" % self.key_name
    else:
        lookup = "%s" % self.key_name
    return "(%s %s %s)" % (lhs, self.operator, lookup), params


def patch():
    KeyTransform.as_sql = as_sql

Usage:

  1. 将其添加到您的底部settings.py:

    import patch_jsonb
    patch_jsonb.patch()
    
  2. 代替__123__查找使用__K123__查找 - 大写K将被此补丁删除:

    MyModel.objects.filter(data__K10__startswith='2017')
    

并考虑避免使用数字作为 jsonb 对象键......

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

带有数字键的 Django postgres Json 字段 的相关文章

  • 从values() 或values_list() 中排除字段

    有没有一种有效的方法从函数中排除字段values or values list e g Videos objects filter id 1 get values 我想从此查询集中排除该字段duration 我知道我可以指定我想要在结果中包
  • 如何在 Django 管理 UI 的文本区域中保留空行?

    我在一个对象上有一个字段 我使用 Django 3 2 管理 UI 中的文本区域来渲染它这段代码 https stackoverflow com a 431412 就像是 class MyObject models Model some t
  • “psycopg2 的构建轮子失败” - 使用 virtualenv 和 pip 的 MacOSX

    我第一次尝试与其他几个人一起制作一个网站 在尝试使用 Django Python VirtualEnv 时遇到了一个奇怪的错误 我已经找到了针对其他操作系统 例如 Ubuntu 的此问题的解决方案 但找不到针对 Mac 的任何好的解决方案
  • 如何引用 models.py 之外的信号

    在文档中Django 它指定models py是定位信号回调函数的好地方 post save pre save etc 这段代码应该放在哪里 您可以将信号处理和注册代码放在您喜欢的任何地方 但是 您需要确保它所在的模块获取 尽早导入 以便信
  • Django 的登录代码

    谁能给我一些带有模板代码的示例代码来创建 Django 登录 Thanks 包含示例登录模板在文档中 https docs djangoproject com en stable topics auth default module dja
  • Django:通过外键将两个表连接到第三个表?

    我有三个型号 class A Model class B Model id IntegerField a ForeignKey A class C Model id IntegerField a ForeignKey A 我想要得到 B i
  • Django“.widget.attrs.update”没有效果

    我有一个具有以下 init 方法的 ModelForm def init self args kwargs super FragebogenForm self init args kwargs self fields birth date
  • 将 Django OAuth2 提供程序与 JupyterHub 结合使用

    我正在尝试运行与 JupyterHub 服务器配对的 Django Web 应用程序 用户通过 Web 应用程序输入 然后在登录后获得对笔记本服务器的访问权限 为了促进这一点 我尝试使用OAuth2 其中 Django 提供身份验证 Jup
  • Django:使用 python-magic 在模型中进行文件字段验证

    我有一个包含文件字段的模型 我想将其限制为 pdf 文件 我在模型中编写了干净的方法 因为我还想检查管理和 shell 级别模型的创建 但它不适用于模型清理方法 然而 形式清洁方法正在发挥作用 class mymodel models Mo
  • 为什么 Django 的 URLField 默认截断为 200 个字符?

    我喜欢 Django 并且经常使用它 我发现它的大部分默认设置都是正常的 但有一个一直困扰着我 以至于我在每个项目中都覆盖了它 a 的默认最大长度URLField https github com django django blob st
  • 静态文件配置不正确

    我已经在 Heroku 上部署了简单的博客应用程序 它运行在Django 1 8 4 我在静态文件方面遇到了一些问题 当打开我的应用程序时 我看到Application Error页面 所以我尝试调试它并发现当我提交到 Heroku 时它无
  • 管理文件字段当前 url 不正确

    在 Django 管理中 只要有 FileField 编辑页面上就会有一个 当前 框 其中包含指向当前文件的超链接 但是 此链接会附加到当前页面 url 因此会导致 404 因为不存在这样的页面 例如 http 127 0 0 1 8000
  • Django CreateView:在验证之前设置用户

    我有一个模型 根据对象是由用户还是系统创建 对其名称字段使用不同的验证 class Symbol models Model name models CharField name unique True max length 64 creat
  • 测试中的模型 - Django 1.7 问题

    我正在尝试将我的项目移植为使用 Django 1 7 除了一件事之外 一切都很好 测试文件夹内的模型 Django 1 7 新迁移在内部运行 migrate 命令 在运行syncdb之前 这意味着如果模型未包含在迁移中 它将不会填充到数据库
  • 防止 Celery Beat 运行相同的任务

    我有一个计划的 celery 每 30 秒运行一次任务 我有一个每天作为任务运行 另一个每周在用户指定的时间和一周中的某一天运行 它检查 开始时间 和 下一个预定日期 在任务完成之前 下一个计划日期不会更新 但是 我想知道如何确保 cele
  • 如何以编程方式在另一个视图中调用 Django Rest Framework 视图?

    我有以下使用 Django Rest 框架 DRF 构建的基于通用类的视图 class ExampleDetail generics RetrieveUpdateDestroyAPIView queryset Example objects
  • Django 自定义 UserManager 中的 self.model()

    所以 我对 Django 还很陌生 尽管我的代码在遵循 Django 文档 在 Django 中自定义身份验证 之后工作 但我不明白他们的示例中的 self model 实际如何工作 它来自哪里以及它如何与 自己 这是在文档底部找到的示例
  • 防止 Django 在并发请求时多次将同一对象保存到数据库

    对于我们的博客平台 我们有一个 文章 模型 其中包含一个 更新的 日期时间字段 class Article models Model updated models DateTimeField null True blank True 当任何
  • 如何使用注释和聚合在 Django 的 ORM 中执行此 GROUP BY 查询

    我真的不知道如何翻译GROUP BY and HAVING到姜戈的QuerySet annotate and QuerySet aggregate 我正在尝试将这个 SQL 查询转换为 ORM 语言 SELECT EXTRACT year
  • Django - 缺少 1 个必需的位置参数:'request'

    我收到错误 get indiceComercioVarejista 缺少 1 个必需的位置参数 要求 当尝试访问 get indiceComercioVarejista 方法时 我不知道这是怎么回事 views from django ht

随机推荐

  • 使用 COMMAw,d 转换数字

    我正在关注SAS 帮助页面 http support sas com documentation cdl en lrdict 64316 HTML default viewer htm a000200667 htm并试图获得与页面底部示例相
  • 测试 post 请求时 Django 消息中间件问题

    我正在尝试测试一个 UpdateView 它将一条消息添加到重定向的成功页面 看来我的问题来自messages因为 pytest 返回 django contrib messages api MessageFailure 如果不安装 dja
  • 计算文件中的字长

    所以我的函数应该打开一个文件并计算字长并给出输出 例如 许多 样本 txt 字长1 2 长度为 2 的单词 6 长度为 3 的单词 7 长度为 4 的单词 6 我的sample txt 文件包含 这是一个测试文件 1 个字的长度是多少 长度
  • 将 ProcessStartInfo.WorkingDirectory 设置为 UNC 路径

    我有一个用 VB net 编写的实用程序 它作为计划任务运行 它在内部调用另一个可执行文件 并且必须访问映射驱动器 显然 Windows 在用户未登录时访问映射驱动器的计划任务存在问题 即使向任务本身提供了身份验证凭据也是如此 好的 为了解
  • document.querySelector 获取包含括号的类名

    我正在编写的软件必须与我无法控制的第三方网络应用程序的 dom 配合使用 有些类名带有参数 例如class view box 200px 我猜这些类名是 Sass Less mixins arguments document querySe
  • 按文本而不是值对 Datagridview 的列进行排序

    我的 datagridview 中有一个列是组合框列 我希望它按其显示值 即文本 而不是其值 在本例中为数据库中的 int 列表 排序 我怎样才能做到这一点 您可以通过覆盖来做到这一点SortCompare事件于DataGridView w
  • Google App-Gmail 无法设置。通过 swiftmailer SMTP 传输 (PHP) 发送时 Gmail 替换地址

    您好 感谢您提前提供的任何帮助 我正在使用 swiftmailer SMTP 传输方法从我的 PHP 脚本发送电子邮件 发送消息就好了 有用 问题是 无论我将 FROM REPLYTO SENDER 设置为什么 电子邮件都会作为 GMAIL
  • Spring:具有自动装配依赖项的通用类

    我有一个标准的 Spring Boot MVC 应用程序 其中包含许多实体以及相应的存储库和服务 组件之间共享许多基础设施 因此我想将其抽象为通用类 我目前正在尝试实现这一目标的方式是这样的 仅显示传达想法的框架 interface Abs
  • CGAffineTransformMakeScale() 动画后扭曲视图框架

    我正在使用 theCGAffineTransformMakeScale 对视图进行动画处理 使其看起来像从屏幕中心生长一样 它在 iOS 8 beta 4 模拟器中运行良好 但在 7 1 版本中它会扭曲视图的框架 view alpha 0
  • 使用 UTF-8 的 getBytes() 不适用于大写德语变音符号

    为了开发我正在使用ResourceBundle直接从 IDE 中的资源目录读取 UTF 8 编码的属性文件 我在该文件的 Eclipse 文件属性中设置 native2ascii 用于生产 例如 menu file open label f
  • Android可取消启动画面

    我正在尝试按照以下规则创建一个具有横幅和取消按钮的启动页面 如果没有按下任何按钮 5 秒后转到主要活动 如果按下取消按钮 则立即转到主要活动 如果横幅被按下 则转到其他活动 My code public class BannerSplash
  • java.net.SocketException:打开的文件太多

    我有一个java应用程序 它运行得很好 在Ubuntu 10 04上 几个小时 直到它遇到 java net SocketException 打开文件太多 Sender java的代码可以找到here https code google c
  • 在 ansible shell 命令中使用 {{ 和 }}

    我的剧本里有这个 name Get facts about containers shell docker ps f name jenkins format raw Names endraw register container 请注意 我
  • Extjs4 在组合框中添加一个空选项

    我在 ExtJS4 中有一个带有此初始配置的组合框 xtype combobox name myCombo store MyStore editable false displayField name valueField id empty
  • 将 Hessian 矩阵定义为零

    在使用 scipy optimize minimize 和 trust constr 方法时 我得到了这个 UserWarning scipy optimize hessian update strategy py 187 UserWarn
  • 为什么 token.py 的存在会导致内置 help() 崩溃? [复制]

    这个问题在这里已经有答案了 作为一个爱好 学习项目 我正在用 Python 编写一个解析器生成器 我的一个代码文件名为 token py 其中包含几个用于将纯字符串转换为 Token 对象的类 我刚刚发现 在 Python 中使用控制台中的
  • ASPNETDB.MDF 文件未显示在 APP_DATA 中

    我正在了解 Microsoft 关于 MVC 2 表单身份验证的演练 http msdn microsoft com en us library ff398049 aspx http msdn microsoft com en us lib
  • 找不到 support-fragment.jar (com.android.support:support-fragment:27.0.2)

    我克隆了我的项目并使用 Android studio 打开 但构建失败并出现以下错误同一个项目对其他人来说运行良好 What went wrong Could not resolve all files for configuration
  • 字符串比较 Objective-C

    我一直在努力进行简单的比较 但无法让它发挥作用 我正在读取一个 XML 文件 我需要比较其中的数据才能显示正确的图片 http www cleaner se larm xml http www cleaner se larm xml 解析示
  • 带有数字键的 Django postgres Json 字段

    我有带有 postgres json 字段的模型 class MyModel models Model data JSONField null True 然后 我这样做 m1 MyModel objects create data 10 2