postgresql Django查询以字段值开头的字符串文字

hi3rlvi2  于 2023-06-29  发布在  PostgreSQL
关注(0)|答案(1)|浏览(201)

我在Django上使用Graphene,有一个例子,我需要检索Django的内容类型,它对应于一个添加了“Node”的类名,类似于这样:

ContentType.objects.get(model__something="MyModelNode")

将检索“model”等于“MyModel”的ContentType。如果是另一种方式,我会使用“model__istartswith='MyModel'”。在SQL中,我正在寻找这样的东西:

SELECT * FROM some_table WHERE $1 ILIKE 'MyModel%';

但我不知道如何用查询集来实现。有什么想法吗

rjee0c15

rjee0c151#

你可以用**.alias(…)[Django-doc]“注入”值,然后以相反的顺序使用__istartswith**查找[Django-doc]:

from django.db.models import F, Value

ContentType.objects.alias(val=Value('MyModelNode')).filter(
    val__istartswith=F('model')
)

因此,这将检索ContenType s,as model,空字符串'''M''My'等。
也就是说,如果你只想删除最后四个字符,你用途:

ContentType.objects.filter(val__istartswith='MyModelNode'[:-4])

这将构造一个删除了最后四个字符的字符串,所以用'MyModel'代替'MyModelNode'

相关问题