我有一个复杂的Q-object
query = Q(offer__price__gt=1000)
query.add(Q(offer__delivery_days=0), Q.AND)
query.add(Q(offer__stock__name='example'))
现在,我需要创建类似的Q-object
,但要在每个项目之前添加product__
。
第一种方法是使用字典:
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
)
两种方法都很丑陋。我该怎么做更漂亮?