gpt4 book ai didi

django jsonfield 查询一个数组值

转载 作者:行者123 更新时间:2023-11-29 11:33:23 28 4
gpt4 key购买 nike

我有这个模型:

class InventoryItem(models.Model):
size_range = JSONField(null=True) # JSONField in Django 1.9

我在其中填充了以下数据:

InventoryItem.objects.create(size_range={'size': ['S', 'M', 'L']})

但是当我执行以下查询时:

InventoryItem.objects.filter(size_range__size__contains='S')

我收到以下错误:

django.db.utils.DataError: invalid input syntax for type json
LINE 1: ..._inventoryitem"."size_range" -> 'size' @> 'S' LIMIT ...
^
DETAIL: Token "S" is invalid.
CONTEXT: JSON data, line 1: S

如何使用 .filter() 方法正确执行查询?这是 .filter() 方法生成的 SQL 查询:

'SELECT "app_name_inventoryitem"."id", 
"app_name_inventoryitem"."size_range", FROM
"app_name_inventoryitem" WHERE
"app_name_inventoryitem"."size_range" -> \'size\' @> S'

如何使用 .filter() 方法正确执行查询?提前致谢。

最佳答案

如文档中所述,包含运算符接受任何 JSON 而不仅仅是字符串字典。 https://docs.djangoproject.com/en/dev/ref/contrib/postgres/fields/#containment-and-key-operations

你可以像下面那样做

InventoryItem.objects.filter(size_range__size__contains=['S'])

这将返回对象,如果您执行以下操作

InventoryItem.objects.filter(size_range__size__contains=['K'])

它将返回一个空的查询集。

您还可以执行以下操作:

InventoryItem.objects.filter(size_range__size__contains=['S', 'M'])

这也将返回您的对象。

关于django jsonfield 查询一个数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35135099/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com