python - Django按JSONField中名为“id”的字段过滤
问题描述
我有 Django 应用程序和 PostgreSQL 数据库。我的问题是我无法按 JSONField 中名为“id”的字段进行过滤。
我的模型看起来像这样:
class SnapshotAuditing(models.Model):
data = JSONField(null=True, blank=True)
created = models.DateTimeField(auto_now_add=True)
我这样填充它:
snapshot = SnapshotAuditing(
data={
'id': student.id,
'some_value': some_value,
}
)
snapshot.save()
比我想执行以下选择请求:
price_change = SnapshotAuditing.objects.filter(
data__id=student.id
).order_by('created').first()
但我得到这个错误:
bl/transfers.py:98: in get_coefficient_and_hours_unused
data__id=student.id
../env2.7.14/lib/python2.7/site-packages/django/db/models/manager.py:85: in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
../env2.7.14/lib/python2.7/site-packages/django/db/models/query.py:784: in filter
return self._filter_or_exclude(False, *args, **kwargs)
../env2.7.14/lib/python2.7/site-packages/django/db/models/query.py:802: in _filter_or_exclude
clone.query.add_q(Q(*args, **kwargs))
../env2.7.14/lib/python2.7/site-packages/django/db/models/sql/query.py:1250: in add_q
clause, _ = self._add_q(q_object, self.used_aliases)
../env2.7.14/lib/python2.7/site-packages/django/db/models/sql/query.py:1276: in _add_q
allow_joins=allow_joins, split_subq=split_subq,
../env2.7.14/lib/python2.7/site-packages/django/db/models/sql/query.py:1210: in build_filter
condition = self.build_lookup(lookups, col, value)
../env2.7.14/lib/python2.7/site-packages/django/db/models/sql/query.py:1102: in build_lookup
lhs = self.try_transform(lhs, name, lookups)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <django.db.models.sql.query.Query object at 0x1182f6dd0>, lhs = Col(student_snapshotauditing, student.SnapshotAuditing.data), name = 'id', rest_of_lookups = ['id']
def try_transform(self, lhs, name, rest_of_lookups):
"""
Helper method for build_lookup. Tries to fetch and initialize
a transform for name parameter from lhs.
"""
transform_class = lhs.get_transform(name)
if transform_class:
return transform_class(lhs)
else:
raise FieldError(
"Unsupported lookup '%s' for %s or join on the field not "
"permitted." %
> (name, lhs.output_field.__class__.__name__))
E FieldError: Unsupported lookup 'id' for JSONField or join on the field not permitted.
../env2.7.14/lib/python2.7/site-packages/django/db/models/sql/query.py:1120: FieldError
你能帮忙吗?
解决方案
推荐阅读
- java - 如何将图像集放在excel java单元格的中心
- spring - 如何使用 BodyInserters.fromFormData 发送对象
- google-cloud-platform - 是否可以将所有 GA 数据导入大查询
- r - 如何在矩阵中插入“n”列
- javascript - 如何将音频从浏览器流式传输到服务器?
- php - 使用比较 2 个表来加工大多数 Suitabale 名称
- mongodb - 为什么在 MongoDB Compass 中每次刷新时索引使用量都会增加(增加 2)
- sql - 过去 N 周的 SQL 销售额总和,包括销售额为 0 的一周
- angular - 如何以角度控制浏览器后退按钮
- php - PHP Curl 在 200 毫秒后停止读取