Джанго: поиск из разных таблиц в Джанго

Я пытаюсь реализовать функциональность поиска для пользователя в 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)

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

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

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

2 ответа

Решение

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

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

См. Сложные поиски с объектами Q для деталей.

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

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

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

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

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

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

Profile.objects.filter(category__pk=27)

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

Profile.objects.filter(category__sub_cat__name__iexact='exact sub category name')
Другие вопросы по тегам