通过包含字符串来过滤查询集

时间:2020-11-06 15:58:49

标签: python sql django django-queryset django-orm

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

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

class Article(...):
    text = ...

我正在尝试__in,但似乎没有用。

alerts = alerts.filter(Q(substring__isnull=True) | Q(substring='') | Q(substring__in=article.text))

您知道该怎么做吗?我不能使用contains,因为它是相反的。

1 个答案:

答案 0 :(得分:1)

您可以使用.annotate(…) [Django-doc]注入text中的article,然后过滤对象:

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'))
)