通过一组String过滤Django

时间:2015-10-05 03:10:23

标签: python sql django

我想在django中找到表中所有以一组字符串中的一个字符串开头的元素。我知道我们可以使用 __ startswith 过滤来查找以字符串开头的元素,而且,我们可以使用 __ in 过滤来查找一组数字。我如何合并它们?

例如,对于此模型

class Inventary:
    code = models.CharField(max_length=10)
    name = models.CharField(max_length=150)

假设我有三个要素:

  1. 1.01.2 ---- Object1
  2. 1.02.3 ---- Object2
  3. 1.03.4 ---- Object3
  4. 因此,我想要一个过滤器,允许我同时找到列表L中以某些字符串开头的对象,其中L在这种情况下为[" 1.01"," 1.02"。]

2 个答案:

答案 0 :(得分:5)

>>> from django.db.models import Q

>>> values = ['1.01', '1.02']

>>> query = Q()
>>> for value in values:
...     query |= Q(name__startswith=value)

>>> Inventary.objects.filter(query)

它动态构建一个查询,该查询将获取name1.011.02开头的对象:

>>> Inventary.objects.filter(Q(name__startswith='1.01') | Q(name__startswith='1.02'))

答案 1 :(得分:0)

您可以链接多个这样的过滤器:

model.objects.filter(name__startswith='1.01').filter(name__startswith='1.02')