Как делать объект 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
)
Все это как-то криво и не очень понятно как работать со сложными запросами. Есть ли какой-то способ получше?