Как делать объект Q на основе другого объекта Q

Есть некоторый объект Q, который собирается по частям:

query = Q(offer__price__gt=1000)
query.add(Q(offer__delivery_days=0), Q.AND)
query.add(Q(offer__stock__name='example'))

Мне нужно создать из итогового объекта точно такой же набор фильтров, только со связью через одно поле, то есть чтобы в запросах было не offer__, а, например, product__offer__.

Я пробовал сделать это двумя способами и оба мне не нравятся. Первый, сделать это с помощью словаря:

query_dict = {}
query_dict['offer__price__gt'] = 1000
query_dict['offer__delivery_days'] = 0
query_dict['offer__stock__name'] = 'example'
query = Q(**query_dict)

query_dict2 = {'product__' + k: v for k, v in  query_dict.items()}
query2 = Q(**query_dict2)

Второй - перебрать значения в Q.children

query2 = Q()
for f in query.children:
    kwargs = {'product__' + f[0]: f[1]}
    offer_filters.add(
        Q(**kwargs),
        Q.AND
    )

Все это как-то криво и не очень понятно как работать со сложными запросами. Есть ли какой-то способ получше?


Ответы (0 шт):