我有这个型号:
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()方法正确执行查询? 这是上面的SQL查询.filter()方法生成:
'SELECT "app_name_inventoryitem"."id",
"app_name_inventoryitem"."size_range", FROM
"app_name_inventoryitem" WHERE
"app_name_inventoryitem"."size_range" -> \'size\' @> S'
如何使用.filter()方法正确执行查询?提前谢谢。
答案 0 :(得分:4)
正如文档中所提到的,包含运算符接受任何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'])
这也将返回你的对象。
答案 1 :(得分:1)
我有一段时间没有使用过django,但是,这可能是你在哪里寻找的吗?
InventoryItem.objects.filter(size_range__size__contains=['S'])