簡體   English   中英

用 Q 進行字典理解

[英]Dictionary comprehension with Q

假設我有以下代碼:

criteria = {'description': 'tt', 'hostname': '2'}
filters = Q()
{filters.add(Q(**{k+'__icontains': v}), Q.AND) for k,v in criteria.items()}

我不知道如何避免結果加倍:

{<Q: (AND: ('description__icontains', 'tt'), ('hostname__icontains', '2'))>,
 <Q: (AND: ('description__icontains', 'tt'), ('hostname__icontains', '2'))>}

我知道我應該將Q.AND轉移Q.AND某個地方,不是嗎?

看起來您正在檢查set推導式的結果set ,它在修改后兩次列出相同的Q對象( filters )。 這實際上不是問題 - 您不會在任何地方使用該結果集 - 但它看起來確實有點令人驚訝。

作為替代方案,應該可以一次性通過Q()所有kwargs

criteria = {'description': 'tt', 'hostname': '2'}
filters = Q(**{k + '__icontains': v for k, v in criteria.items()})

這消除了對集合理解的需要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM