【问题标题】:Django QuerySet API inverse field lookupDjango QuerySet API 反向字段查找
【发布时间】:2018-03-30 16:52:16
【问题描述】:

我想知道是否有可能使用__contains 字段查找的“逆”。

https://docs.djangoproject.com/en/1.11/ref/models/querysets/#contains

例如:

class Person(models.Model):
    ...
    last_name = models.CharField()

使用这个 Person 模型,我可以执行以下查询,该查询将返回具有适合给定字符串的 last_name 字段的 Persons:

>>> Person.objects.filter(last_name__contains='John Doe, Jane Roe, ...')
<QuerySet: [Person: Donald Doe]>

【问题讨论】:

    标签: django postgresql django-queryset searchqueryset


    【解决方案1】:

    你可以使用:

    import operator    
    from functools import reduce
    from django.db.models import Q  
    
    Person.objects.exclude(reduce(operator.or_, (Q(last_name__contains=x) for x in ['John Doe', 'Jane Roe', '...'])))
    

    等于:

    Person.objects.exclude(Q(last_name__contains='Jhon') | Q(last_name__contains='Jane'))
    

    您可以将operator.or_ 更改为operator.and_

    【讨论】:

    • 嗯,这是寻找在其last_name 字段中具有“John Doe”、“Jane Roe”等的 Person 对象。所以不幸的是,这仍然没有倒置。
    • @White srry 我误解了问题让我纠正
    • @White 查看我的编辑,而不是使用filter put exclude
    • 抱歉,现在它仍然只返回带有例如last_name="John Doe" 的对象。烦不烦? :=>
    猜你喜欢
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    • 2020-02-06
    • 2011-10-01
    • 2014-02-16
    • 2017-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多