1

我有一个用例,我需要获取所有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

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

4

2 回答 2

10

不知道你在问什么,但试试价值表达。

MyModel.objects.annotate(annotated_field=Value('some string', output_field=CharField())).filter(annotated_field__startswith=F('existing_field'))
于 2019-10-16T10:25:17.993 回答
0

对于那些仍然面临新版本 Django 问题的人来说,必须使用ExpressionWrapper并且可能F

from django.db.models import ExpressionWrapper, F
MyModel.objects.annotate(annotated_field=ExpressionWrapper(Value('some string', output_field=CharField()))).filter(annotated_field__startswith=F('existing_field'))
于 2022-02-25T00:13:52.633 回答