【发布时间】:2017-03-30 03:51:30
【问题描述】:
我希望通过比较 JSONField 类中的两个值来进行 Django 查询。我遇到了模型上的引用字段的 Django F() 对象,但它似乎不适用于 JSONField,因为它试图在后面的部分执行 JOIN。所以,例如:
class Event(models.Model):
data = JSONField(default=None)
假设数据字段如下所示:
{
"value_1":20,
"value_2":25
}
我希望这样查询它:
events = Event.objects.filter(data__value_2__gte=F('data__value_1'))
但是,错误是这样的:
Cannot resolve keyword 'value_1' into field. Join on 'data' not permitted.
也试过了:
events = Event.objects.filter(data__value_2__gte=F('data')['value_1'])
但我给出了错误:
TypeError: 'F' object has no attribute '__getitem__'
还有; Django 1.10,Python 2.7.11,PG 版本:9.4.9
知道如何根据 value_1 和 value_2 的比较进行过滤吗?
【问题讨论】:
-
这只是一个猜测,但请尝试
data__value_2__gte=F('data')['value_1']。 -
没用:TypeError: 'F' object has no attribute 'getitem'
-
Django 1.10,Python 2.7.11
-
还有postgres版本,请
-
你试过用
annotate来代替吗?
标签: python django postgresql