来自其他Q对象的Q对象

时间:2020-05-21 19:10:26

标签: python django django-orm

我有一个复杂的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
    )

两种方法都很丑陋。我该怎么做更漂亮?

0 个答案:

没有答案