Как преобразовать строку в формат django.db.models.query_utils.Q?
Для функции поиска я хочу сохранить запрос django в базу данных и позже выполнить его. Я сохранил запрос, как показано ниже в одной таблице (компания, у которой есть идентификатор, qryText). Запрос django сохраняется в виде строки.
qrySaved = (AND: ('code__in', ['10', '11', '12']), ('color__in', ['1', '2', '3']))
Я не могу выполнить это как
q = Company.objects.get(id=1)
Car.objects.filter(q.qryText)
поскольку q.qryText является строкой не в формате django.db.models.query_utils.Q. Как я мог выполнить этот строковый запрос?
1 ответ
Решение
Строковое представление запроса не легко (безопасно) обратимо, поэтому вместо него я бы попробовал другой тип кодирования. Например, вместо этого используйте библиотеку pickle.
Для кодирования:
import pickle
from django.db.models import query_utils
q = Q(code__in=[10, 11, 12], color_in=[1, 2, 3])
q_pickled = pickle.dumps(q)
Чтобы декодировать снова:
# Assuming that q_pickled is available and is a valid pickled string
import pickle
q = pickle.loads(q_pickled)