通过仅检查部分来过滤查询集

时间:2018-04-18 01:28:49

标签: django django-queryset

如果它只在第一行包含0.5,我需要过滤此查询集。 作为示例,第一组是真实的,第二组是假的。

 1. ('1. First row (0.5)\n2. Second row (0.5)\n3. Third row (0.69)\n4.
    Fifth row(0.67)\n5. Sixth row(0.66)',)

 2. ('1. First row (0.76)\n2. Second row (0.5)\n3. Third row (0.69)\n4.
    Fifth row(0.67)\n5. Sixth row(0.66)',)

我尝试了这个查询但是第二个例子也是真的。

queryset = queryset.filter(value__regex = r"\A.*", value__contains='(0.5')

如何只查看部分值?

3 个答案:

答案 0 :(得分:1)

我相信你需要先剪切字符串,获取第一行,然后使用contains查询它。 Django具有Substr功能。这是一个例子。

from django.db.models.functions import Substr 
queryset.filter(alias=Substr('first_row', 1, 15), first_row__contains='(0.5'))

答案 1 :(得分:1)

我相信你应该改变你的正则表达式,试试这个:

queryset = queryset.filter(value__regex = '^([^\\n]+\(0\.5.*?)\\n')

答案 2 :(得分:0)

如果行始终由\n终止,第二行始终以2.开头,则可以尝试以下内容:

search_term = '(0.5)\n2.'
qs = qs.filter(value__contains=search_term)