Как преобразовать строку в формат 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)
Другие вопросы по тегам