相关疑难解决方法(0)

如何聚合(最小/最大等)Django JSONField数据?

我正在使用django 1.9及其内置的JSONField和postgres 9.4.在我的模型的JSONFieldjson字段中,我使用一些值存储对象,包括数字.我需要聚合它们来找到最小/最大值.像这样的东西:

Model.objects.aggregate(min=Min('attrs__my_key'))
Run Code Online (Sandbox Code Playgroud)

提取特定密钥也很有用:

Model.objects.values_list('attrs__my_key', flat=True)
Run Code Online (Sandbox Code Playgroud)

上述查询失败attrs:"无法将关键字'my_key'解析为字段.不允许加入'attrs'."

有可能吗?

注意:1)我知道如何进行简单的postgres查询来完成这项工作,所以我专门搜索ORM解决方案,以便能够过滤等.2)我想这可以用(相对)新的查询表达式/查找api完成但是我还没有研究过它.

django orm json

26
推荐指数
4
解决办法
5965
查看次数

Django在json字段中注释特定键

我正在使用Django 1.9和Postgres 9.5.我有一个MyModelJSONField(django.contrib.postgres.fields)的模型().JSON值在模型中的所有对象中具有相同的结构.

{
"key1": int_val_1,
"key2": int_val_2
}
Run Code Online (Sandbox Code Playgroud)

我想通过我的指定键的值来命令我的查询集JSONField.就像是

MyModel.objects.annotate(val=F('jsonfield__key1')).order_by('val')
Run Code Online (Sandbox Code Playgroud)

这不起作用 - 我收到以下错误

Cannot resolve keyword 'key1' into field. Join on 'jsonfield' not permitted.
Run Code Online (Sandbox Code Playgroud)

无论如何我能做到这一点吗?

python django postgresql json django-queryset

9
推荐指数
1
解决办法
2108
查看次数

Django:在 JSONField 上使用 F() 表达式?

我有模型

class Product(Model):
    properties = JSONField()
Run Code Online (Sandbox Code Playgroud)

查询时

Product.objects.values('properties__color')
Run Code Online (Sandbox Code Playgroud)

我得到了正确的结果

从产品中选择 product.properties->color

但是,当我在做我认为等效的事情时

Product.objects.values(color=F('properties__color'))
Run Code Online (Sandbox Code Playgroud)

执行的查询完全不同

SELECT product.properties AS color FROM product

这是 django 的 JSONField 的错误,还是我误解了F()表达式?

python django

7
推荐指数
1
解决办法
927
查看次数

标签 统计

django ×3

json ×2

python ×2

django-queryset ×1

orm ×1

postgresql ×1