Tengo una base de datos MySQL con una tabla que contiene un campo JSON llamado cosas. El JSON se ve así
cosas = {"valor1": "phil", "valor2": "jill"}
Tengo una colección de objetos que he extraído de la base de datos a través de
my_things = Name_table.objects.valuesAhora, me gustaría filtrar la colección my_things por uno de los campos JSON. he intentado esto
mis_cosas = mis_cosas.filter(cosas__contiene={'valor': 'phil'})
que devolvió una colección vacía. yo también he intentado
mis_cosas = mis_cosas.filter(cosas={'valor': 'phil'})
y
mis_cosas = mis_cosas.filter(cosas__exactas={'valor': 'phil'})
Estoy usando Django 1.10 y MySQL 5.7 ¿Pensamientos?
Depende de cómo almacene exactamente JSON en el campo. Si usa django-jsonfield , entonces sus things serán cadenas sin espacios, con cadenas entre comillas: '{"value1":"phil","value2":"jill"}' .
Luego, a través de documentos :
my_things = my_things.filter(things__contains='"value1":"phil"')debería devolver su QuerySet filtrado, porque
>>> tmp_str = '{"value1":"phil","value2":"jill"}' >>> '"value1":"phil"' in tmp_str True