有没有办法用非表达式注释 django 查询?

Posted

技术标签:

【中文标题】有没有办法用非表达式注释 django 查询?【英文标题】:Is there a way to annotate django query with non-expression? 【发布时间】:2020-02-13 02:17:58 【问题描述】:

我有一个用例,我需要获取existing_fieldsome string 开头的所有对象。

some string 动态变化,因此我需要一种智能方法来过滤掉对象。

我的想法是像这样创建带注释的查询:

MyModel.objects.annotate(annotated_field='some string').filter(annotated_field__startswith=F('existing_field'))

目前它失败了: QuerySet.annotate() received non-expression(s): some string

有没有办法用字符串值注释对象?

【问题讨论】:

【参考方案1】:

不确定您在问什么,但请尝试Value 表达式。

MyModel.objects.annotate(annotated_field=Value('some string', output_field=CharField())).filter(annotated_field__startswith=F('existing_field'))

【讨论】:

非常感谢。像你说的那样同时解决了它,但首先注释然后过滤。需要先创建annotated_field

以上是关于有没有办法用非表达式注释 django 查询?的主要内容,如果未能解决你的问题,请参考以下文章

在 django 中,有没有办法在单个查询中直接用相关对象注释查询?

有没有办法在 Django Querysets 中组合注释和过滤聚合?

有没有办法在基于正则表达式的 LOKI 查询中使用推断值?

django-q 单个作业的多个 cron 表达式

有没有办法在文本字段表达式中访问SQL查询结果,以有条件地在标题带中显示它?

Django2.0版本的path方法无法使用正则表达式的解决办法