- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的模型中有一个 Json 字段 -
class Product(models.Model):
...
detailed_stock = JSONField(load_kwargs={'object_pairs_hook': collections.OrderedDict},default=dict)
{
"total":0,
"5[1]":0
}
Product.objects.filter(detailed_stock__total = 0)
但它抛出错误 -
Unsupported lookup 'total' for JSONField or join on the field not permitted.
Traceback (most recent call last):
File "C:\Users\lenovo\AppData\Local\conda\conda\envs\myDjangoEnv\lib\site-packages\django\core\handlers\exception.py", line 35, in inner
response = get_response(request)
File "C:\Users\lenovo\AppData\Local\conda\conda\envs\myDjangoEnv\lib\site-packages\django\core\handlers\base.py", line 128, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\lenovo\AppData\Local\conda\conda\envs\myDjangoEnv\lib\site-packages\django\core\handlers\base.py", line 126, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\lenovo\AppData\Local\conda\conda\envs\myDjangoEnv\lib\site-packages\django\views\generic\base.py", line 69, in view
return self.dispatch(request, *args, **kwargs)
File "C:\Users\lenovo\AppData\Local\conda\conda\envs\myDjangoEnv\lib\site-packages\braces\views\_access.py", line 102, in dispatch
request, *args, **kwargs)
File "C:\Users\lenovo\AppData\Local\conda\conda\envs\myDjangoEnv\lib\site-packages\django\views\generic\base.py", line 89, in dispatch
return handler(request, *args, **kwargs)
File "C:\Users\lenovo\AppData\Local\conda\conda\envs\myDjangoEnv\lib\site-packages\django\views\generic\list.py", line 142, in get
self.object_list = self.get_queryset()
File "c:\Users\lenovo\Desktop\My_Django_Stuff\bekaim\accounts\views.py", line 142, in get_queryset
queryset = Product.objects.filter(detailed_stock__total = 0)
File "C:\Users\lenovo\AppData\Local\conda\conda\envs\myDjangoEnv\lib\site-packages\django\db\models\query.py", line 836, in filter
return self._filter_or_exclude(False, *args, **kwargs)
File "C:\Users\lenovo\AppData\Local\conda\conda\envs\myDjangoEnv\lib\site-packages\django\db\models\query.py", line 854, in _filter_or_exclude
clone.query.add_q(Q(*args, **kwargs))
File "C:\Users\lenovo\AppData\Local\conda\conda\envs\myDjangoEnv\lib\site-packages\django\db\models\sql\query.py", line 1253, in add_q
clause, _ = self._add_q(q_object, self.used_aliases)
File "C:\Users\lenovo\AppData\Local\conda\conda\envs\myDjangoEnv\lib\site-packages\django\db\models\sql\query.py", line 1271, in _add_q
current_negated, allow_joins, split_subq)
File "C:\Users\lenovo\AppData\Local\conda\conda\envs\myDjangoEnv\lib\site-packages\django\db\models\sql\query.py", line 1277, in _add_q
split_subq=split_subq,
File "C:\Users\lenovo\AppData\Local\conda\conda\envs\myDjangoEnv\lib\site-packages\django\db\models\sql\query.py", line 1215, in build_filter
condition = self.build_lookup(lookups, col, value)
File "C:\Users\lenovo\AppData\Local\conda\conda\envs\myDjangoEnv\lib\site-packages\django\db\models\sql\query.py", line 1069, in build_lookup
lhs = self.try_transform(lhs, name)
File "C:\Users\lenovo\AppData\Local\conda\conda\envs\myDjangoEnv\lib\site-packages\django\db\models\sql\query.py", line 1115, in try_transform
(name, lhs.output_field.__class__.__name__))
django.core.exceptions.FieldError: Unsupported lookup 'total' for JSONField or join on the field not permitted.
[31/Dec/2018 16:13:37] "GET /accounts/product-list/?clean=outofstock HTTP/1.1" 500 150927
最佳答案
我认为您正在使用 django-jsonfield如 load_kwargs={'object_pairs_hook': collections.OrderedDict}
所示而不是 django.contrib.postgres.fields.JSONField .django-jsonfield
适用于不提供 native dict
的数据库类型并基于一个简单的 TextField
.当您使用 product.detail_stock
访问字段值时内部保存 str
转换为 dict
使用 json.loads()
由领域本身。因此,您只能使用 icontains
之类的操作。和 contains
用于查询该字段。
如果您使用 postgres 作为数据库,您可以充分利用 django.contrib.postgres.fields.JSONField
正如文档所述。但是你必须导入正确的 JSONfield
通过使用 django.contrib.postgres.fields import JSONField
.
mysql有解决方案(包 django-mysql)也是。
关于django - 不支持的 JSONField 查找或不允许加入该字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53986686/
问题 设置 JSONField 的最佳方法是什么?在 django 中拥有新列表的默认值? 上下文 有一个模型,其中一个字段是项目列表。在没有项目集的情况下,模型应该有一个空列表。 当前解决方案 fr
我有一个使用 bradjasper 的 django-jsonfield 的 Postgres 9.4/Django 1.8 数据库包裹。 (参见 https://github.com/bradjas
我想过滤一个 JSONField my_field,其中 JSON 不为空。在文档中有 has_key 和 has_any_key 方法,但我事先不知道可能的 key 。在 SQL 中它应该是这样的:
我的课是这样的: class Foo(models.Model): known_by = JSONField() 我的数据看起来像这样 { "known_by" : [
class Blog: values = JSONField(blank=True, default=list) [ { "id": 1, "value": "31" }
我在 Django 的模型上有一个 JSONField,称为 metadata。 该字段中的数据可能看起来像这样 { "vis": { "plots": [
我有一个 jsonfield foo = JSONField(default=list) 我想过滤查询集,以便 foo 有一些数据(不是空列表) 我试过了 MyModel.objects.filter
是否可以使用ILIKE(包含)运算符在词典列表中搜索一个键值?我的json字段看起来像这样: object = MyModel() object.json_data = [ {
使用 JSONField 时,内容会在读取值时自动从 JSON 解码为 python 对象。我有一个用例,我将字符串编码回 JSON 以嵌入到模板中。有什么方法可以从对象中获取原始 JSON 字符串吗
我们一直在使用来自 jsonfield 的 JSONField图书馆一段时间,但现在我们想使用 native PostgreSQL JSONField .所以我想知道是否可以更改现有模型的字段类型,保
我有这个模型: class InventoryItem(models.Model): size_range = JSONField(null=True) # JSONField in Dja
我从 Django 的文档中获取了以下示例,除了替换添加了一个键 '99': >>> Dog.objects.create(name='Rufus', data={ ... 'breed': 'lab
在我的应用程序中,有一个模型将配置存储在其字段之一中。该字段定义为 JSONField。我有一个严格的结构来定义该字段的内容应该是什么样子,但我正在努力寻找一种方法来序列化它以验证 API 请求中的数
我已经搜索了几天,试图找到一种 DRY 方法,使用 django 的内置验证和表单呈现从 JsonField 创建动态表单。我还没有找到一个包含 django 验证和渲染的解决方案,所以我想为此创建一
我通过使用 JSONField 在 mysql 中创建了一个 TextField (django) 类型的表。这就是我的模型的样子 from django.db import models from
我的模型中有一个 Json 字段 - class Product(models.Model): ... detailed_stock = JSONField(loa
这是模型: class ModelA(models.Model): field1 = models.CharField(max_length=100) field2 = models.
我正在尝试使用 Django + MySQL 为我的模型实现自定义 JSON 字段。这就是我的 models.py 的样子: from __future__ import unicode_litera
数据库是postgres 9.4在我的表中,我使用的是 JSONField class Item(models.Model): item = models.CharField(max_leng
对于经验丰富的 (Django) 开发人员来说,这可能是一个简单的问题。 我的项目的数据库是PostgreSQL。 我打算使用单个 protected 模型实例作为某些数据的集中存储。该实例将有一个
我是一名优秀的程序员,十分优秀!