开发者

Django: how to filter for rows whose fields are contained in passed value?

MyModel.objects.filter(field__icontains=value) returns all the rows whose field contains value. How to do the opposite? Namely, construct a queryset that returns all the rows whose field is contained in value?

Preferably w开发者_开发问答ithout using custom SQL (ie only using the ORM) or without using backend-dependent SQL.


field__icontains and similar are coded right into the ORM. The other version simple doesn't exist.

You could use the where param described under the reference for QuerySet.

In this case, you would use something like:

MyModel.objects.extra(where=["%s LIKE CONCAT('%%',field,'%%')"], params=[value])

Of course, do keep in mind that there is no standard method of concatenation across DMBS. So as far as I know, there is no way to satisfy your requirement of avoiding backend-dependent SQL.

If you're okay with working with a list of dictionaries rather than a queryset, you could always do this instead:

qs = MyModel.objects.all().values()
matches = [r for r in qs if value in r[field]]

although this is of course not ideal for huge data sets.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜