问题标签 [django-jsonfield]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1128 浏览

django - Django JSONField 字符串包含

使用 Django 1.10 的 JSONField,我想通过 json 字段过滤查询集,该字段在包含子字符串(类似 sql)的特定键处具有值。例如,有一个 json 字段link,带有url密钥。我想要它的 url 包含的对象.jpg

0 投票
0 回答
451 浏览

django - Django GenericRelation 与 JSONField

在我的应用程序中,可以将许多不同类型的Records 映射到Person. 在我最初的实现中,我让每条记录都继承自一个抽象基类,并使用GenericRelations 来管理整个事情。代码有点复杂,但它可以工作:

模型.py

等等。(正如我试图指出的那样,每种类型Record都与其他类型完全不同,每种模型的字段都非常不同。)

当我围绕这些模型构建应用程序时,我开始怀疑这种方法是否可以扩展,因为我最终将拥有许多RecordX-type 类。我开始考虑如何将所有Records 放在一个表中,并用一列指示Record每个表是哪一种,最终发现了 new-ish JSONField。乍一看,这似乎正是我想要简化整个事情的方法。

所有这一切似乎都很好,直到我意识到通过将模型字段转换为 JSON 属性而失去了多少功能,鉴于 JSON 中的数据是用户输入的,这一功能很重要。

  • 我无法轻松验证 JSON 中的数据条目。显然我可以这样data = JSONField(validators=[something???]),但据我所知,这个实现并不适合validator依赖于值的情况Record.type
  • 即使我能弄清楚这一点,我也会失去各个字段的干净管理界面。是的,我想我可以使用自定义保存功能制作自定义表单,但这似乎相当麻烦。

所以——我正在寻找这种情况下最好的架构的洞察力,在不使代码库不必要地复杂化的情况下平衡性能。或者,对于这种情况我不知道还有其他方法吗?

(我知道这不是理想的 StackOverflow 问题,但我希望根据性能和可维护性评估这些(或其他)代码示例使这个问题可以回答,而不仅仅是可以讨论?)

谢谢!

0 投票
2 回答
2522 浏览

python - 将项目附加到 Django JsonField - 获取 TypeError

在我的models.py中,我有以下代码:

从代码中可以看出,当一个 Column 被保存时,如果该列的必填字段被添加到 Table 的结构中。但是,当我尝试从管理面板保存列时,出现以下错误:

我认为问题在于我的结构字段的默认值。我还尝试了以下方法:

每次,我都得到同样的错误。有什么帮助吗?谢谢。

0 投票
1 回答
1178 浏览

django - Django 按 JSONField 键排序

我有以下带有 JSONField 的 django 模型:

和结构如下的数据字段:

数据字段之一如何排序查询集?

0 投票
2 回答
938 浏览

python - 使用 Django 在 JSONField 上选择

我的应用程序严重依赖 API,这些 API 会意外地更改它们返回数据的方式。出于这个原因,我选择在 Django 中使用 PSQL 和 JSONFields。
我已经看过很多关于如何按 JSONField 中的值进行过滤的示例/文档,但是我还没有看到任何允许我对这些值进行 SELECT 的示例/文档。

我所知道的有效;
queryset.filter(jsonfield__key_name = 'value')

我想知道怎么做;
queryset.values('jsonfield__key_name')

提前致谢!

0 投票
0 回答
531 浏览

django - 使用 django 迁移从旧需求 (django-json-field) 迁移的方式/最佳方式是什么?

我目前在 Django 1.7 上,我的数据库是 PostgreSQL。我有以下模型。

我现在希望升级到 Django 1.10 并利用JSONField.django.contrib.postgres.fields

我改变我的模型看起来像这样。

然后我为应用程序创建迁移。

当它尝试创建迁移时,它会抱怨......

我明白它为什么抱怨。django-json-field 未针对 django 1.10 更新,它希望导入json_field原始迁移文件之一。因此,我可以返回并修改导入 json_field 的原始迁移文件,但它实际上不会修改列数据类型,因为它认为它已经完成。或者,我必须修复 django-json-fields 才能与 django 1.10 一起使用,这样才能创建迁移。即使我不使用它,我也必须保留该要求,这只是为了迁移!

在我的上一个项目中,我刚刚修改了原始迁移,使其认为它一直在使用django.contrib.postgres.fields.jsonb.JSONField。但是,在我运行迁移之后,它并没有将列的数据类型从 更改textjsonb。所以我手动做了,因为它是一个较小的项目。对于这个项目,我真的不想手动更改数据库。

关于如何优雅地从 django-json-field 迁移并计划将其从我的代码和要求中删除的任何建议?

0 投票
2 回答
2889 浏览

python - Django 管理页面:通过多个模型选择而不是原始文本自定义 ID 的字典 (JSONField)

我有一个模型,其中一个字段是postgres.fields.JSONField

将要存储在那里的 Json 有一个可变的 ID 字典,它引用数据库中的其他项目(可能的关系/属性)。

请允许我更具体一点:

基本上,我正在尝试创建一个折扣系统,其中一些折扣适用于某些产品。JSON 字段包含用于了解哪些产品可以获得折扣的约束。

例如:

  • 如果我想对“饮料”类别下的所有产品应用 50% 的折扣,并且“饮料”类别5在数据库中具有 id,则折扣记录如下所示:

    /li>
  • 如果我想为“饮料”类别中的所有产品以及由可口可乐制造的所有产品减免 20 美元那么filter_by字典将如下所示:

    /li>
  • 如果我想对特定产品(假设id是 is的产品3)应用 25% 的折扣,那么字典将如下所示:

    /li>

这个想法似乎足够灵活,可以满足我的需求,并且(到目前为止)我很高兴。


现在,问题在于如何在模型的 Django 管理区域中输入这些值Discount

正如预期的那样,filter_by字典呈现为最初如下所示的文本字段:

在此处输入图像描述

如果我想向其中添加字段,我需要编写我想要的确切 JSON ......这意味着如果我想对“饮料”类别应用折扣,我需要找出该类别的哪个 ID has 在数据库中,然后手动键入{"category": [5]},同时在键入时非常小心':确保我不会错过 a][...

Thaaaat ...好吧,这不是很有帮助...

由于我只会通过几个字段(,,...)进行过滤,这些字段category实际上manufacturerproduct数据库其他元素的 ID 列表,我想为每个我可以过滤的东西显示一个大的 MultiSelect 框所以我可以看到我可以过滤的所有元素的用户友好列表,选择一些,然后,当我点击“创建折扣”时,我会得到filter_by字典(我仍然远离担心如何生成字典,因为我什至不知道如何正确呈现管理员表单)。

类似于 Django Admin 自动为我的产品类别所做的事情:

在此处输入图像描述

这真的非常非常好:一种产品可以属于多个类别。为此,Django 并排呈现两个<select multiple框,其中包含可用的类别以及产品已经属于的类别……我可以通过鼠标点击添加/删除类别……真的,真的很好。但是 Django 可以这样做,因为它知道 是模型categories中的ManyToMany关系Product

Discount模型的问题是没有,或的ManyToMany字段。可怜的 Django 不知道 a与所有这些事情有关:它只知道有一个字段。categorymanufacturerproductDiscountJson

我真的希望能够<select>在 Django 区域中显示一堆,列出可以存储在字典中的所有可能的过滤器(、、...)(一个带有双精度的Category条目Manufacturer,用于显示数据库,一个条目,显示所有可用的制造商......等等)。但我真的,真的不知道该怎么做。IDfilter_by<select>CategoryManufacturer

我可能会让你厌烦我所做的一堆尝试,使用Widgets, 试图通过 a form, through来表示 JSON 字段forms.ModelMultipleChoiceField(顺便说一句,这似乎是最接近我想要的东西,虽然仍然很远)。 ..但我认为那是毫无意义的,因为没有什么能接近我想要的。

像往常一样,感谢您阅读这封巨大的电子邮件,并提前感谢您。任何提示都会非常感激,即使只是你应该看看“这个”

0 投票
1 回答
4836 浏览

python - 更新 JsonField django 中的数据

我想更新 django 的 jsonfield 中的 json 对象,我在更新数据时遇到问题。

我的模型看起来像这样 https://codeshare.io/Gbeonj

我的 json 看起来像这样 https://codeshare.io/5obDPX

所以基本上json有错误的数据,而不是“国民身份证”它有“国民身份证”所以我想更新这个json对象以获得正确的数据。这就是我所说的

应该是 "documentType": "NATIONAL ID",“国民身份证”

我正在使用以下脚本来更新服务器中的 json 对象。

问题是这个对象没有被善意地更新我做错了什么?

0 投票
3 回答
2012 浏览

django - Django JSONField 具有特定的键

我的课看起来像这样:

我的数据看起来像这样

我有什么办法可以强制Jsonfield要求遵循by,value[]dict 的格式。我知道如何使用serialiazers

还有其他更简洁的方法来强制执行此操作(在模型定义本身中)?谢谢

0 投票
2 回答
1257 浏览

python - Django:基于 JSONField 动态设置模型实例属性

我有一个关于如何在模型实例启动时动态设置模型属性的问题。

我正在使用带有原生 PostgreSQL JSONField 的简单模型:

有没有办法在模型实例化时根据存储在“数据”字段中的值来设置模型实例的属性?

我希望能够做到这一点:

我最初的想法是重写模型的init方法并使用 setattr() 设置实例属性,但是在 Django 文档中强烈建议不要重写模型的init方法。

有没有其他方法可以实现这一目标?任何帮助表示赞赏。

PS:我知道我可以访问存储在模型实例上的“数据”中的值,如下所示:booking.data ['foo'],所以这不是我想要的。