Python 通过包含字符串筛选查询集

Python 通过包含字符串筛选查询集,python,sql,django,django-queryset,django-orm,Python,Sql,Django,Django Queryset,Django Orm,我需要过滤子字符串位于给定文本中的所有Alert对象 class Alert(..): substring = CharField... class Article(...): text = ... 我试着在中输入,但似乎不起作用 alerts = alerts.filter(Q(substring__isnull=True) | Q(substring='') | Q(substring__in=article.text)) 你知道怎么做吗?我不能使用contains,因

我需要过滤子字符串位于给定文本中的所有
Alert
对象

class Alert(..):
    substring = CharField...

class Article(...):
    text = ...
我试着在中输入,但似乎不起作用

alerts = alerts.filter(Q(substring__isnull=True) | Q(substring='') | Q(substring__in=article.text))
你知道怎么做吗?我不能使用
contains
,因为它是反向的。

您可以使用注入
文章的
文本,然后过滤对象:

from django.db.models import F, Q, TextField, Value

Alert.objects.annotate(
    article_text=Value(article.text, output_field=TextField())
).filter(
    Q(substring=None) |
    Q(substring='') |
    Q(article_text__contains=F('substring'))
)
从django.db.models导入F、Q、TextField、Value
Alert.objects.annotate(
article\u text=Value(article.text,output\u field=TextField())
).过滤器(
Q(子字符串=无)|
Q(子字符串=“”)|
Q(article\u text\u contains=F('substring'))

)
什么是
文章
,一个
文章
对象?@WillemVanOnsem是的,就是文章对象有
文本
字段。哇,太棒了!谢谢你。你确定这条线吗
article\u text=Value(article.text)
它返回
FieldError:无法解析表达式类型,未知输出\u字段
@Milano:如果添加
output\u字段
提示,会发生什么?