Django ORM非严格搜索多个字段

时间:2013-11-28 07:12:07

标签: python django django-models django-queryset

模型中有一些字段。我需要搜索表中的一些行并检查多个字段:f1,f2,f3。 因此,查询可以匹配一到三个字段。例如,f1匹配,但f2和f2不匹配。或者f1和f2匹配,但f3不匹配。等等。

我认为它应该是这样的:

models_list = Model.objects.filter(f1__contains=query, 
                                   f2__contains=query, 
                                   f3__contains__query)

但是如何做这个条件是可选的而不是强制性的?

1 个答案:

答案 0 :(得分:2)

您需要使用Q objects

from django.db.models import Q

Model.objects.filter(
    Q(f1__contains=query) |
    Q(f2__contains=query) |
    Q(f3__contains=query)
)

如果您使用的是MySQL,请考虑使用search - 它比contains快得多,因为它使用全文索引。