【问题标题】:Filter queryset by containing a string通过包含字符串过滤查询集
【发布时间】:2021-02-19 09:04:28
【问题描述】:

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

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

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

我正在尝试__in,但它似乎不起作用。

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

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

【问题讨论】:

  • 什么是articleArticle 对象?
  • @WillemVanOnsem 是的,它是具有 text 字段的 Article 对象。

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


【解决方案1】:

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

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

【讨论】:

  • 哇,太好了!谢谢。
  • 你确定这条线吗? article_text=Value(article.text) 它返回 FieldError: Cannot resolve expression type, unknown output_field
  • @Milano:如果添加ouput_field 提示会怎样?
猜你喜欢
  • 1970-01-01
  • 2021-01-23
  • 1970-01-01
  • 1970-01-01
  • 2010-11-20
  • 1970-01-01
  • 2016-07-16
  • 1970-01-01
  • 2022-12-05
相关资源
最近更新 更多