问题标签 [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.
django - Django JSONField 字符串包含
使用 Django 1.10 的 JSONField,我想通过 json 字段过滤查询集,该字段在包含子字符串(类似 sql)的特定键处具有值。例如,有一个 json 字段link
,带有url
密钥。我想要它的 url 包含的对象.jpg
django - Django GenericRelation 与 JSONField
在我的应用程序中,可以将许多不同类型的Record
s 映射到Person
. 在我最初的实现中,我让每条记录都继承自一个抽象基类,并使用GenericRelation
s 来管理整个事情。代码有点复杂,但它可以工作:
模型.py
等等。(正如我试图指出的那样,每种类型Record
都与其他类型完全不同,每种模型的字段都非常不同。)
当我围绕这些模型构建应用程序时,我开始怀疑这种方法是否可以扩展,因为我最终将拥有许多RecordX
-type 类。我开始考虑如何将所有Record
s 放在一个表中,并用一列指示Record
每个表是哪一种,最终发现了 new-ish JSONField
。乍一看,这似乎正是我想要简化整个事情的方法。
所有这一切似乎都很好,直到我意识到通过将模型字段转换为 JSON 属性而失去了多少功能,鉴于 JSON 中的数据是用户输入的,这一功能很重要。
- 我无法轻松验证 JSON 中的数据条目。显然我可以这样
data = JSONField(validators=[something???])
,但据我所知,这个实现并不适合validator
依赖于值的情况Record.type
。 - 即使我能弄清楚这一点,我也会失去各个字段的干净管理界面。是的,我想我可以使用自定义保存功能制作自定义表单,但这似乎相当麻烦。
所以——我正在寻找这种情况下最好的架构的洞察力,在不使代码库不必要地复杂化的情况下平衡性能。或者,对于这种情况我不知道还有其他方法吗?
(我知道这不是理想的 StackOverflow 问题,但我希望根据性能和可维护性评估这些(或其他)代码示例使这个问题可以回答,而不仅仅是可以讨论?)
谢谢!
python - 将项目附加到 Django JsonField - 获取 TypeError
在我的models.py中,我有以下代码:
从代码中可以看出,当一个 Column 被保存时,如果该列的必填字段被添加到 Table 的结构中。但是,当我尝试从管理面板保存列时,出现以下错误:
我认为问题在于我的结构字段的默认值。我还尝试了以下方法:
每次,我都得到同样的错误。有什么帮助吗?谢谢。
django - Django 按 JSONField 键排序
我有以下带有 JSONField 的 django 模型:
和结构如下的数据字段:
数据字段之一如何排序查询集?
python - 使用 Django 在 JSONField 上选择
我的应用程序严重依赖 API,这些 API 会意外地更改它们返回数据的方式。出于这个原因,我选择在 Django 中使用 PSQL 和 JSONFields。
我已经看过很多关于如何按 JSONField 中的值进行过滤的示例/文档,但是我还没有看到任何允许我对这些值进行 SELECT 的示例/文档。
我所知道的有效;
queryset.filter(jsonfield__key_name = 'value')
我想知道怎么做;
queryset.values('jsonfield__key_name')
提前致谢!
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
。但是,在我运行迁移之后,它并没有将列的数据类型从 更改text
为jsonb
。所以我手动做了,因为它是一个较小的项目。对于这个项目,我真的不想手动更改数据库。
关于如何优雅地从 django-json-field 迁移并计划将其从我的代码和要求中删除的任何建议?
python - Django 管理页面:通过多个模型选择而不是原始文本自定义 ID 的字典 (JSONField)
我有一个模型,其中一个字段是postgres.fields.JSONField。
将要存储在那里的 Json 有一个可变的 ID 字典,它引用数据库中的其他项目(可能的关系/属性)。
请允许我更具体一点:
基本上,我正在尝试创建一个折扣系统,其中一些折扣适用于某些产品。JSON 字段包含用于了解哪些产品可以获得折扣的约束。
例如:
如果我想对“饮料”类别下的所有产品应用 50% 的折扣,并且“饮料”类别
/li>5
在数据库中具有 id,则折扣记录如下所示:如果我想为“饮料”类别中的所有产品以及由可口可乐制造的所有产品减免 20 美元,那么
/li>filter_by
字典将如下所示:如果我想对特定产品(假设
/li>id
是 is的产品3
)应用 25% 的折扣,那么字典将如下所示:
这个想法似乎足够灵活,可以满足我的需求,并且(到目前为止)我很高兴。
现在,问题在于如何在模型的 Django 管理区域中输入这些值Discount
。
正如预期的那样,filter_by
字典呈现为最初如下所示的文本字段:
如果我想向其中添加字段,我需要编写我想要的确切 JSON ......这意味着如果我想对“饮料”类别应用折扣,我需要找出该类别的哪个 ID has 在数据库中,然后手动键入{"category": [5]}
,同时在键入时非常小心'
,:
确保我不会错过 a]
或[
...
Thaaaat ...好吧,这不是很有帮助...
由于我只会通过几个字段(,,...)进行过滤,这些字段category
实际上manufacturer
是product
数据库其他元素的 ID 列表,我想为每个我可以过滤的东西显示一个大的 MultiSelect 框,所以我可以看到我可以过滤的所有元素的用户友好列表,选择一些,然后,当我点击“创建折扣”时,我会得到filter_by
字典(我仍然远离担心如何生成字典,因为我什至不知道如何正确呈现管理员表单)。
类似于 Django Admin 自动为我的产品类别所做的事情:
这真的非常非常好:一种产品可以属于多个类别。为此,Django 并排呈现两个<select multiple
框,其中包含可用的类别以及产品已经属于的类别……我可以通过鼠标点击添加/删除类别……真的,真的很好。但是 Django 可以这样做,因为它知道 是模型categories
中的ManyToMany
关系Product
。
该Discount
模型的问题是没有,或的ManyToMany
字段。可怜的 Django 不知道 a与所有这些事情有关:它只知道有一个字段。category
manufacturer
product
Discount
Json
我真的希望能够<select>
在 Django 区域中显示一堆,列出可以存储在字典中的所有可能的过滤器(、、...)(一个带有双精度的Category
条目Manufacturer
,用于显示数据库,一个条目,显示所有可用的制造商......等等)。但我真的,真的不知道该怎么做。ID
filter_by
<select>
Category
Manufacturer
我可能会让你厌烦我所做的一堆尝试,使用Widgets
, 试图通过 a form
, through来表示 JSON 字段forms.ModelMultipleChoiceField
(顺便说一句,这似乎是最接近我想要的东西,虽然仍然很远)。 ..但我认为那是毫无意义的,因为没有什么能接近我想要的。
像往常一样,感谢您阅读这封巨大的电子邮件,并提前感谢您。任何提示都会非常感激,即使只是你应该看看“这个”
python - 更新 JsonField django 中的数据
我想更新 django 的 jsonfield 中的 json 对象,我在更新数据时遇到问题。
我的模型看起来像这样 https://codeshare.io/Gbeonj
我的 json 看起来像这样 https://codeshare.io/5obDPX
所以基本上json有错误的数据,而不是“国民身份证”它有“国民身份证”所以我想更新这个json对象以获得正确的数据。这就是我所说的
应该是 "documentType": "NATIONAL ID",
“国民身份证”
我正在使用以下脚本来更新服务器中的 json 对象。
问题是这个对象没有被善意地更新我做错了什么?
django - Django JSONField 具有特定的键
我的课看起来像这样:
我的数据看起来像这样
我有什么办法可以强制Jsonfield
要求遵循by,value[]
dict 的格式。我知道如何使用serialiazers
还有其他更简洁的方法来强制执行此操作(在模型定义本身中)?谢谢
python - Django:基于 JSONField 动态设置模型实例属性
我有一个关于如何在模型实例启动时动态设置模型属性的问题。
我正在使用带有原生 PostgreSQL JSONField 的简单模型:
有没有办法在模型实例化时根据存储在“数据”字段中的值来设置模型实例的属性?
我希望能够做到这一点:
我最初的想法是重写模型的init方法并使用 setattr() 设置实例属性,但是在 Django 文档中强烈建议不要重写模型的init方法。
有没有其他方法可以实现这一目标?任何帮助表示赞赏。
PS:我知道我可以访问存储在模型实例上的“数据”中的值,如下所示:booking.data ['foo'],所以这不是我想要的。