2013-02-13 4 views
0

Я пытаюсь реализовать функции поиска для пользователя в Django.Django: Поиск из разных таблиц в django

Я могу использовать Q для одной таблицы, но здесь scenerio отличается.

Вот мои модели:

Class Profile(models.Model)   
    name = models.OnoeToOneField(User) 
    category = models.ForeignKey(Category) 
    Tags = models.ForeignKey(Tags) 

class Category(models.Model) 
    name = models.Charfield(max_length = 100) 
    sub_cat = models.ForeignKey(SubCategory) 

Я хочу найти пользователя, который принадлежит к categoey и/или тег

Но я не могу найти способ сделать это. Я не хочу использовать Haystack или Whoosh.

Пожалуйста, предложите мне простой способ достичь этого.

+0

«Теперь нужно искать пользователя с именем f или категорию и тег ». Не могли бы вы перефразировать и уточнить? – jpic

+0

chack обновленный пожалуйста – masterofdestiny

ответ

1

Вы попробовали такой запрос?

User.objects.filter(
    Q(profile__category__name__icontains=search_string) | 
    Q(profile__Tags__name__icontains=search_string) 
).distinct() 

Для получения более подробной информации см. complex lookups with Q objects.

Обратите внимание, что я использую distinct() для устранения повторяющихся результатов, поскольку один и тот же пользователь может быть выбран по двум причинам (каждый из которых соответствует объекту Q).

(Конечно, вы должны приспособить Tags__name, который я поставил как для примера, но у меня нет источника модели тегов).

+0

спасибо, я попробую сейчас. Но не могли бы вы предложить мне хороший модуль поиска для больших данных. – masterofdestiny

+0

Я использую haystack :) – jpic

1

Это очень просто на самом деле:

Фильтр с категорией имя:

Profile.objects.filter(category__name__iexact='category 1') 

Фильтр с категорией ID:

Profile.objects.filter(category__pk=27) 

Фильтр с подразделом название категории:

Profile.objects.filter(category__sub_cat__name__iexact='exact sub category name') 
Смежные вопросы