Django 中的 Q 对象

Posted

技术标签:

【中文标题】Django 中的 Q 对象【英文标题】:Q-objects in Django 【发布时间】:2015-04-13 10:49:50 【问题描述】:

如何通过过滤器获得的 var 值进行选择,然后在循环中附加一个值?

items = Item.objects.filter(Q(var__icontains=term) | Q(another_var__icontains=term))
res = []
for item in items:
    res.append(
        'val': item.(var or another_var?),
    )

【问题讨论】:

【参考方案1】:

恐怕您必须手动检查var/anohter_var才能找到查询集中匹配的变量。

items = Item.objects.filter(Q(var__icontains=term) |
                            Q(another_var__icontains=term))
uterm = term.upper()
res = []
for item in items:
    value = item.var if uterm in item.var.upper() else item.another_var
    res.append('val': value)

【讨论】:

【参考方案2】:

在本地检查,或执行两个不同的查询。 第一个选项:

items = Item.objects.filter(Q(var__icontains=term) | Q(another_var__icontains=term))
res = []
for item in items:
    if term.lower() in item.var.lower():
        v = item.var
    else:
        v = item.another_var
    res.append(
        'val': v,
    )

第二个选项,只做两个查询(两个过滤器调用)。

【讨论】:

以上是关于Django 中的 Q 对象的主要内容,如果未能解决你的问题,请参考以下文章

Django:'Q'对象不可迭代

Django - 如何将 QuerySet 转换为 Q 对象?

django:使用 Q 对象

构建后是不是可以修改 Django Q() 对象?

在Django Q对象中查找最新日期

Django:为相关表构建动态 Q 查询