Python Django ORM通过多个字段进行非严格搜索

Python Django ORM通过多个字段进行非严格搜索,python,django,django-models,django-queryset,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,

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

我认为应该是这样的:

models_list = Model.objects.filter(f1__contains=query, 
                                   f2__contains=query, 
                                   f3__contains__query)
但是如何执行此条件是可选的而不是强制性的?

您需要使用:

如果你使用MySQL,考虑使用它——它比包含要快得多,因为它使用全文索引。

from django.db.models import Q

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