在 Django 中,可以使用 F() 对象来查看常量是否包含来自字段的字符串?

mkl*_*ber 1 django django-models django-queryset

所有,
我基本上都在尝试进行关键字通知,因此每当创建具有名称的对象时,任何想要收到此名称中的任何单词的通知的人都会被通知。
例如

记录:
   关键词:你好
   关键词:世界

新名称:“你好世界”

返回两条记录


我已经在 sqlite 中创建了一个正确适用于此的查询,并且我知道如何跨数据库翻译它。

SELECT * FROM table t
WHERE "a constant string" LIKE "%" || t.field || "%";
Run Code Online (Sandbox Code Playgroud)

我已经确定在 django 中,可以使用F() 对象将一个字段与另一个字段进行比较,如下所示:

Entry.objects.filter(n_comments__gt=F('n_pingbacks'))
Run Code Online (Sandbox Code Playgroud)

现在有人知道如何用常量字符串替换第一个字段吗?像这样:

Entry.objects.filter("constant string"__icontains=F('n_pingbacks'))
Run Code Online (Sandbox Code Playgroud)

还是我要倒退?

小智 5

它看起来不是特别漂亮,但可以使用标准过滤器完成所有操作。

from django.db.models import ExpressionWrapper, CharField, Value

Entry.objects.annotate(
    my_const=ExpressionWrapper(Value("a constant string"),
                               output_field=CharField())
).filter(my_const__contains=F('n_pingbacks'))
Run Code Online (Sandbox Code Playgroud)