python-Django:通过“参数具有字段值的一部分”来过滤查询集?
作者:互联网
我有一个简单的模型:
class Place(models.Model):
name = models.CharField()
并具有一些代表性的名称,例如星巴克,麦当劳等,如下所示.
id | name
----+----------
1 | Starbucks
2 | McDonald's
3 | ...
而且我还有一些地名作为查询参数,例如:
>星巴克派克广场
>麦当劳的沙湖路
>另一个星巴克
我想要达到的目的是使用给定的参数过滤/获取合适的Place对象,确定它是否具有场所名称的一部分.
如何使用Django的QuerySet API做到这一点?
检查了参考资料和论坛后发现类似以下内容,但没有运气:
Place.objects.get(name__ispartof=PARAM)
# or
Place.objects.get(PARAM__contains=Q('name'))
在Postgres中,我的情况可能等同于:
SELECT id FROM table
WHERE 'Starbucks Pike Place' LIKE CONCAT('%', name, '%')
我是否应该为此执行raw()SQL查询?
提前致谢.
解决方法:
我想我已经找到了一种不需要原始SQL的可怕方法.希望其他人能够找到更好的东西.
from django.db.models import ExpressionWrapper, CharField, Value, F
param = 'Starbucks Pike Place'
myparam = ExpressionWrapper(Value(param), output_field=CharField())
Place.objects.annotate(param=myparam).filter(param__contains=F('username'))
标签:django-queryset,python,django 来源: https://codeday.me/bug/20191109/2011899.html