编程语言
首页 > 编程语言> > python-Django:通过“参数具有字段值的一部分”来过滤查询集?

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