2013-11-28 4 views
0

Существует модель с некоторыми полями. Мне нужно найти несколько строк в таблице и проверить несколько полей: f1, f2, f3. Таким образом, запрос может быть сопоставлен с одним или тремя полями. Например, f1 соответствует, но f2 и f2 нет. Или f1 и f2, но f3 нет. И так далее.Django ORM нестрогий поиск по нескольким полям

Я думаю, что это должно быть что-то вроде этого:

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

Но как сделать это условие обязательным и не обязательным?

ответ

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, поскольку он использует полнотекстовой индексации.

+0

Это работает! Благодарю. – Paul

Смежные вопросы